@codyswann/lisa 2.247.2 → 2.250.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/README.md +5 -0
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +1102 -0
- package/dist/cli/doctor-kane.d.ts +15 -0
- package/dist/cli/doctor-kane.d.ts.map +1 -0
- package/dist/cli/doctor-kane.js +28 -0
- package/dist/cli/doctor-kane.js.map +1 -0
- package/dist/cli/doctor-worker-epoch.d.ts +11 -0
- package/dist/cli/doctor-worker-epoch.d.ts.map +1 -0
- package/dist/cli/doctor-worker-epoch.js +234 -0
- package/dist/cli/doctor-worker-epoch.js.map +1 -0
- package/dist/cli/doctor.d.ts +3 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +6 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +56 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/kane-cmd.d.ts +45 -0
- package/dist/cli/kane-cmd.d.ts.map +1 -0
- package/dist/cli/kane-cmd.js +91 -0
- package/dist/cli/kane-cmd.js.map +1 -0
- package/dist/cli/ui-lisa-version.d.ts.map +1 -1
- package/dist/cli/ui-lisa-version.js +1 -5
- package/dist/cli/ui-lisa-version.js.map +1 -1
- package/dist/core/kane-cli-parser.d.ts +9 -0
- package/dist/core/kane-cli-parser.d.ts.map +1 -0
- package/dist/core/kane-cli-parser.js +145 -0
- package/dist/core/kane-cli-parser.js.map +1 -0
- package/dist/core/kane-cli-process.d.ts +15 -0
- package/dist/core/kane-cli-process.d.ts.map +1 -0
- package/dist/core/kane-cli-process.js +77 -0
- package/dist/core/kane-cli-process.js.map +1 -0
- package/dist/core/kane-cli-types.d.ts +61 -0
- package/dist/core/kane-cli-types.d.ts.map +1 -0
- package/dist/core/kane-cli-types.js +3 -0
- package/dist/core/kane-cli-types.js.map +1 -0
- package/dist/core/kane-cli.d.ts +42 -0
- package/dist/core/kane-cli.d.ts.map +1 -0
- package/dist/core/kane-cli.js +253 -0
- package/dist/core/kane-cli.js.map +1 -0
- package/dist/core/kane-pilot-report.d.ts +21 -0
- package/dist/core/kane-pilot-report.d.ts.map +1 -0
- package/dist/core/kane-pilot-report.js +169 -0
- package/dist/core/kane-pilot-report.js.map +1 -0
- package/dist/core/kane-pilot-types.d.ts +60 -0
- package/dist/core/kane-pilot-types.d.ts.map +1 -0
- package/dist/core/kane-pilot-types.js +2 -0
- package/dist/core/kane-pilot-types.js.map +1 -0
- package/dist/core/kane-pilot.d.ts +25 -0
- package/dist/core/kane-pilot.d.ts.map +1 -0
- package/dist/core/kane-pilot.js +255 -0
- package/dist/core/kane-pilot.js.map +1 -0
- package/dist/core/project-config-kane.d.ts +27 -0
- package/dist/core/project-config-kane.d.ts.map +1 -0
- package/dist/core/project-config-kane.js +152 -0
- package/dist/core/project-config-kane.js.map +1 -0
- package/dist/core/project-config.d.ts +11 -0
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +7 -5
- package/dist/core/project-config.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-kane-browser/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-kane/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-track/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa/agents/product-specialist.md +2 -0
- package/plugins/lisa/agents/quality-specialist.md +4 -1
- package/plugins/lisa/agents/verification-specialist.md +2 -2
- package/plugins/lisa/commands/improve-harness.md +6 -0
- package/plugins/lisa/commands/track.md +6 -0
- package/plugins/lisa/rules/eager/config-resolution.md +9 -0
- package/plugins/lisa/rules/eager/convergent-review.md +19 -0
- package/plugins/lisa/rules/eager/tracked-work.md +7 -0
- package/plugins/lisa/rules/eager/verification.md +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +26 -1
- package/plugins/lisa/rules/reference/convergent-review.md +69 -0
- package/plugins/lisa/rules/reference/tracked-work.md +26 -0
- package/plugins/lisa/rules/reference/verification.md +4 -2
- package/plugins/lisa/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-github-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa/skills/lisa-improve-harness/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-jira-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa/skills/lisa-kane-browser/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-linear-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa/skills/lisa-setup-kane/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa/skills/lisa-track/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa/skills/lisa-tracker-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-agy/agents/product-specialist.md +2 -0
- package/plugins/lisa-agy/agents/quality-specialist.md +4 -1
- package/plugins/lisa-agy/agents/verification-specialist.md +2 -2
- package/plugins/lisa-agy/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-agy/commands/lisa/track.md +6 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-agy/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-agy/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-agy/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-agy/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-agy/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-agy/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-agy/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-agy/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/agents/product-specialist.agent.md +2 -0
- package/plugins/lisa-copilot/agents/quality-specialist.agent.md +4 -1
- package/plugins/lisa-copilot/agents/verification-specialist.agent.md +2 -2
- package/plugins/lisa-copilot/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-copilot/commands/lisa/track.md +6 -0
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +9 -0
- package/plugins/lisa-copilot/rules/eager/convergent-review.md +19 -0
- package/plugins/lisa-copilot/rules/eager/tracked-work.md +7 -0
- package/plugins/lisa-copilot/rules/eager/verification.md +1 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +26 -1
- package/plugins/lisa-copilot/rules/reference/convergent-review.md +69 -0
- package/plugins/lisa-copilot/rules/reference/tracked-work.md +26 -0
- package/plugins/lisa-copilot/rules/reference/verification.md +4 -2
- package/plugins/lisa-copilot/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-copilot/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-copilot/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-copilot/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-copilot/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-copilot/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-copilot/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-copilot/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-copilot/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/product-specialist.md +2 -0
- package/plugins/lisa-cursor/agents/quality-specialist.md +4 -1
- package/plugins/lisa-cursor/agents/verification-specialist.md +2 -2
- package/plugins/lisa-cursor/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-cursor/commands/lisa/track.md +6 -0
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +26 -1
- package/plugins/lisa-cursor/rules/config-resolution.mdc +9 -0
- package/plugins/lisa-cursor/rules/convergent-review-reference.mdc +74 -0
- package/plugins/lisa-cursor/rules/convergent-review.mdc +24 -0
- package/plugins/lisa-cursor/rules/tracked-work-reference.mdc +31 -0
- package/plugins/lisa-cursor/rules/tracked-work.mdc +12 -0
- package/plugins/lisa-cursor/rules/verification-reference.mdc +4 -2
- package/plugins/lisa-cursor/rules/verification.mdc +1 -1
- package/plugins/lisa-cursor/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-cursor/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-cursor/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-cursor/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-cursor/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-cursor/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-cursor/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-cursor/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-cursor/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/product-specialist.md +2 -0
- package/plugins/src/base/agents/quality-specialist.md +4 -1
- package/plugins/src/base/agents/verification-specialist.md +2 -2
- package/plugins/src/base/commands/improve-harness.md +6 -0
- package/plugins/src/base/commands/track.md +6 -0
- package/plugins/src/base/rules/eager/config-resolution.md +9 -0
- package/plugins/src/base/rules/eager/convergent-review.md +19 -0
- package/plugins/src/base/rules/eager/tracked-work.md +7 -0
- package/plugins/src/base/rules/eager/verification.md +1 -1
- package/plugins/src/base/rules/reference/config-resolution.md +26 -1
- package/plugins/src/base/rules/reference/convergent-review.md +69 -0
- package/plugins/src/base/rules/reference/tracked-work.md +26 -0
- package/plugins/src/base/rules/reference/verification.md +4 -2
- package/plugins/src/base/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/src/base/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/src/base/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/src/base/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/src/base/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/src/base/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/src/base/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/src/base/skills/lisa-track/SKILL.md +71 -0
- package/plugins/src/base/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/src/base/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -0
- package/rails/copy-overwrite/lefthook.yml +10 -0
- package/scripts/lisa-work-item.mjs +5 -0
- package/typescript/copy-contents/.husky/commit-msg +9 -23
- package/typescript/copy-contents/.husky/pre-push +10 -0
- package/typescript/copy-contents/.husky/prepare-commit-msg +15 -0
|
@@ -34,18 +34,26 @@ Treat the first successful lead-spawn request (or, on the Codex fallback, the fi
|
|
|
34
34
|
|
|
35
35
|
## Resolve the input (first task assigned to the team)
|
|
36
36
|
|
|
37
|
-
$ARGUMENTS is either a
|
|
37
|
+
$ARGUMENTS is either a URL/key for an existing work item, a pointer to a file containing the request, or the request in text format. Every form must resolve to exactly one live, claimed tracker leaf and a verified worktree binding before the lead may begin durable work.
|
|
38
38
|
|
|
39
39
|
The team lead does NOT read the input directly. The first task on the team's plan is "resolve the input" — assigned to a bounded input-resolver teammate, which then:
|
|
40
40
|
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
|
|
41
|
+
The input-resolver invokes `lisa-track $ARGUMENTS` and owns its complete resolve -> claim -> bind transaction:
|
|
42
|
+
|
|
43
|
+
- **Explicit ticket:** call `lisa-tracker-read` against the configured tracker and require a live open/unresolved current-project leaf. **Mismatch guard:** if the ticket format/project does not match the configured tracker (for example, a GitHub URL when `tracker` is `jira`), stop — never auto-translate vendors or trust pasted/stale ticket text. The read captures comments, graph, and metadata, not just the description.
|
|
44
|
+
- **Specification file:** read the entire file without offset or limit, preserve it as the resolved input, and follow the plain-text resolution path below.
|
|
45
|
+
- **Plain text or file contents:** search the configured project conservatively for open leaves describing the same outcome. Live-validate every candidate through `lisa-tracker-read`; reuse only exactly one high-confidence match. When there is no unique match (zero or ambiguous candidates), synthesize one complete single-repository leaf and invoke `lisa-tracker-write` exactly once with `build_ready: true`, then live-read its canonical returned ref. Never create a thin placeholder, hierarchy, or container.
|
|
46
|
+
- **Claim:** invoke `lisa-tracker-claim <canonical-ref>` and require the provider skill's post-read verified `claimed|reused` result. A failed or inaccessible claim blocks the flow.
|
|
47
|
+
- **Bind before durable work:** only after the verified claim, run:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
node scripts/lisa-work-item.mjs bind <canonical-ref>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Require a successful readback of that worktree-local binding. On detached HEAD, `branch: null` is the expected pending binding; after branch creation the mandatory `attach-branch` step below must replace it before any commit. Tracker or binding failure stops the flow; never continue untracked.
|
|
54
|
+
- Return the full resolved work-item context plus `tracker_provider`, canonical `work_item_ref`, resolution outcome, claim outcome, and verified binding to the team lead, who then proceeds to roster selection.
|
|
55
|
+
|
|
56
|
+
The input resolver may perform these tracker and local-binding operations before the Roster Decision because they are the mandatory gate that establishes what work the team is allowed to do. No project source, documentation, plan artifact, branch, or task may be created or changed before this transaction succeeds. Read-only discussion/orientation outside an Implement flow remains exempt per the `tracked-work` rule.
|
|
49
57
|
|
|
50
58
|
The input resolver is the only teammate that may be spawned before the Roster Decision exists. After it returns the resolved input, do not spawn any lifecycle, research, implementation, review, verification, or learning teammate until the Roster Decision has been recorded.
|
|
51
59
|
|
|
@@ -86,13 +94,14 @@ Using the general-purpose agent in Team Lead session, **determine the base branc
|
|
|
86
94
|
- **Rebase the feature branch onto `origin/<base>` and resolve any merge conflicts BEFORE starting work.** If the conflicts cannot be resolved cleanly and safely, create a fix task for the agent team (with the conflicting file list and current merge state) and resolve it before implementation begins — never start work on stale or conflicted code.
|
|
87
95
|
4. **The PR targets the resolved base branch** — carry it as `target_branch=<base>` into `lisa-git-submit-pr` (Verify flow). `git-submit-pr` already chooses a closing keyword when the base is the production/default branch and a non-closing reference for a non-terminal environment branch. For a bug fixed on a non-integration environment branch, the current flow is not done until the fix is merged and verified there, then forward cherry-picked down to the integration branch via a linked follow-up.
|
|
88
96
|
|
|
89
|
-
|
|
97
|
+
Every Implement run now has a tracker work item. Preserve its canonical identifier for development linkage unconditionally:
|
|
90
98
|
|
|
91
|
-
- Capture `tracker_provider` and `work_item_ref` from the
|
|
99
|
+
- Capture `tracker_provider` and `work_item_ref` from the tracked input before creating or reusing a branch. Examples: `github` + `CodySwannGT/lisa#614`, `linear` + `ENG-123`, `jira` + `ENG-123`. Missing linkage is a workflow failure, never an optional/no-ticket mode.
|
|
92
100
|
- If a new branch is needed and the provider can link branches by identifier, include the identifier in the branch name before the human-readable slug. Linear and JIRA integrations commonly link from branch names; GitHub issue linkage is PR-body driven, but including the issue number in the branch name is still useful. Keep branch names URL-safe, for example `codex/ENG-123-add-checkout-copy` or `codex/614-add-checkout-copy`.
|
|
101
|
+
- After the feature branch exists, run `node scripts/lisa-work-item.mjs attach-branch` so the worktree-local binding records the actual branch without treating the branch name as authority.
|
|
93
102
|
- Pass the work-item ref and target branch to `lisa-git-submit-pr` when opening or updating the PR, for example `work_item_ref=CodySwannGT/lisa#614 target_branch=<base resolved from the ticket's environment above>` (not hardcoded `main`). The PR workflow owns provider-specific body text and must decide whether to use a closing keyword or a non-closing reference.
|
|
94
103
|
- After `lisa-git-submit-pr` returns a PR URL, ensure the reverse backlink is present on the source work item by running `lisa-tracker-sync <work_item_ref> pr-ready pr_url=<url> tracker_provider=<provider>`. The sync path must prefer native provider linkage and fall back to one managed `[lisa-pr-link]` comment when native linkage is unavailable or cannot be verified.
|
|
95
|
-
- If the provider has no native branch or PR development-linkage surface,
|
|
104
|
+
- If the provider has no native branch or PR development-linkage surface, the managed `[lisa-pr-link]` fallback is required; never continue without proven ticket-side linkage.
|
|
96
105
|
|
|
97
106
|
Using the general-purpose agent in Team Lead session, Determine which flow applies:
|
|
98
107
|
1. Research -- needs a PRD (no specification exists)
|
|
@@ -185,6 +194,32 @@ Before marking a task complete, the implementing agent records concise MLD into
|
|
|
185
194
|
|
|
186
195
|
Each task must have their learnings captured to the ledger by the learner subagent.
|
|
187
196
|
|
|
197
|
+
## Implement valid suggestions
|
|
198
|
+
|
|
199
|
+
When review, CodeRabbit, local-review, product, quality, security, or specialist
|
|
200
|
+
feedback arrives, apply the `convergent-review` rule before changing code:
|
|
201
|
+
|
|
202
|
+
1. Normalize each finding into severity, blocking yes/no, concrete failure
|
|
203
|
+
scenario, evidence, and proposed smallest fix.
|
|
204
|
+
2. Treat a blocker with no concrete correctness, security, data-loss, or
|
|
205
|
+
contract-violation scenario as malformed. Reply with the missing-evidence
|
|
206
|
+
reason and handle it as non-blocking.
|
|
207
|
+
3. Resolve each finding with one disposition:
|
|
208
|
+
- `fixed`: make the smallest code, test, docs, or generated-artifact change
|
|
209
|
+
that removes the failure scenario.
|
|
210
|
+
- `deferred`: record why the issue is real but non-blocking, and file or link
|
|
211
|
+
follow-up work when useful.
|
|
212
|
+
- `pushed-back`: cite the evidence, scope boundary, or repository rule that
|
|
213
|
+
refutes the finding.
|
|
214
|
+
4. If a reviewer cannot refute a pushback with fresh evidence, the author's
|
|
215
|
+
disposition stands.
|
|
216
|
+
5. After the suggestion-implementation task completes and required gates pass,
|
|
217
|
+
do not reopen review unless new evidence appears: a relevant new commit, a
|
|
218
|
+
failed gate, a newly cited failure scenario, or a scope change.
|
|
219
|
+
6. If a blocking disagreement remains irreconcilable, stop the review loop:
|
|
220
|
+
move the work item to the configured blocked state, add `human-needed` when
|
|
221
|
+
the decision is human-only, and summarize both positions in plain language.
|
|
222
|
+
|
|
188
223
|
Before shutting down the team, execute the Verify flow:
|
|
189
224
|
|
|
190
225
|
1. Run quality gates: lint, typecheck, tests — all must pass. These are prerequisites, NOT verification.
|
|
@@ -214,12 +249,13 @@ Before shutting down the team, execute the Verify flow:
|
|
|
214
249
|
4. Record Implement usage on the originating work artifact via `lisa-usage-accounting` so the work item (or other implementation-owned artifact) gains a direct `lisa-implement` usage entry in the canonical `## Lisa Usage` section. If the parent / child graph is already known, prefer `record_and_rollup` so ancestor totals refresh in the same write; otherwise still write the direct entry, and if runtime usage is unavailable, use `source: unavailable` with nullable token/cost fields instead of skipping the row.
|
|
215
250
|
5. Commit ALL outstanding changes in logical batches on the branch (minus sensitive data/information) — not just changes made by the agent team. This includes pre-existing uncommitted changes that were on the branch before the plan started. Do NOT filter commits to only "task-related" files. If it shows up in git status, it gets committed (unless it contains secrets).
|
|
216
251
|
6. Push the changes - if any pre-push hook blocks you, create a task for the agent team to fix the error/problem whether it was pre-existing or not
|
|
217
|
-
7. Open a pull request with auto-merge on via `lisa-git-submit-pr`, targeting the **base branch resolved from the ticket's environment** (`target_branch=<base>`, per the branch step above), and including the work-item ref
|
|
252
|
+
7. Open a pull request with auto-merge on via `lisa-git-submit-pr`, targeting the **base branch resolved from the ticket's environment** (`target_branch=<base>`, per the branch step above), and including the mandatory work-item ref so the PR can be linked natively to the source issue.
|
|
218
253
|
7a. Confirm two-way linkage before treating PR submission as complete: the PR body/title/branch must reference the work item, and the work item must have either a verified native PR link or a single managed `[lisa-pr-link]` fallback comment from `lisa-tracker-sync`.
|
|
219
254
|
8. PR Watch Loop: Drive the PR to merge via the `drive-pr-to-merge` skill — the single source of truth for clearing every blocker (auto-merge with direct-merge fallback, `BEHIND` re-sync, conflict resolution, failing-check fixes, human + bot review-comment handling with thread resolution, stale `CHANGES_REQUESTED` dismissal, and post-merge ancestry verification). `git-submit-pr` already invokes it; if you reach this step with a PR already open, invoke `drive-pr-to-merge` directly with the PR number. For a large review backlog you may fan the code-fix work out to the agent team, but `drive-pr-to-merge` owns the loop and the terminal conditions — do not re-implement them.
|
|
220
|
-
9. Merge the PR, then refresh the ticket-side backlink with `lisa-tracker-sync <work_item_ref> pr-merged pr_url=<url> merge_sha=<sha> tracker_provider=<provider
|
|
255
|
+
9. Merge the PR, then refresh the ticket-side backlink with `lisa-tracker-sync <work_item_ref> pr-merged pr_url=<url> merge_sha=<sha> tracker_provider=<provider>`.
|
|
221
256
|
10. Monitor the deploy action that triggers automatically from the successful merge
|
|
222
257
|
11. If deploy fails, create a task for the agent team to fix the failure, open a new PR and then go back to step 7
|
|
223
258
|
12. Remote verification: `verification-specialist` verifies in target environment (same checks as local verification, but on remote), and refreshes the verdict (step 2a) to reflect the remote result.
|
|
224
259
|
13. `ops-specialist`: post-deploy health check, monitor for errors in first minutes
|
|
225
260
|
14. If remote verification fails, create a task for the agent team to find out why it failed, fix it and return to step 5. **Bound this loop**: after a small number of full fix→deploy→reverify cycles without reaching a passing remote verdict (treat ~3 as the ceiling unless the work item states otherwise), stop retrying — file a build-ready fix ticket, write the verdict with `status: "blocked"` and the diagnosis, and move the work item to blocked rather than looping indefinitely. The completion gate releases on a `blocked` verdict, so the flow ends with a recorded outcome instead of a silent spin or a self-declared success.
|
|
261
|
+
15. After true terminal completion — required merge/deploy/verification passed, usage/evidence and two-way PR linkage are recorded, and the work item is terminal — run `node scripts/lisa-work-item.mjs clear` and verify the worktree has no current binding. Do not clear on an interruption or blocked outcome; preserving the binding is what keeps resumed work attributable.
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lisa-improve-harness
|
|
3
|
+
description: "Investigate ONE failed or expensive factory trajectory and prove whether a fix helped. Records the job contract, observes the baseline, locates the earliest failed handoff, classifies the gap as exactly one of context | capability | domain-ownership | authority | proof | feedback-delivery | worker-limitation, makes the smallest owning intervention at the authoritative owner (larger changes become a proposed-intervention ticket and the loop stops), verifies at both layers (native gates plus the operational journey), then reruns the same job class in a fresh session and isolated worktree behind a relevance gate — a rerun that never retrieved or invoked the intervention yields no-evidence-for-intervention, never retain. Terminates by posting a fingerprinted result record on the originating work item with decision retain, revise, remove, or test-without. Headless-safe, idempotent per trajectory, single-trajectory bounded claims only."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep", "Edit", "Write"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Improve Harness
|
|
8
|
+
|
|
9
|
+
Run ONE bounded baseline → intervention → fresh-rerun loop on a single failed or expensive
|
|
10
|
+
trajectory. Trajectory: $ARGUMENTS
|
|
11
|
+
|
|
12
|
+
A factory that fails and moves on keeps failing the same way. This loop takes exactly one
|
|
13
|
+
trajectory, finds the earliest place a handoff produced something unusable, fixes that one
|
|
14
|
+
place at its owner, and then tries to prove — in a fresh session that knows nothing about the
|
|
15
|
+
investigation — that the fix is what made the difference. The discipline that makes it worth
|
|
16
|
+
anything is the refusal to claim more than one trajectory can support.
|
|
17
|
+
|
|
18
|
+
**Every terminal state posts a result record to the originating item before stopping — there is
|
|
19
|
+
no silent exit.** That includes `already-improved` (Phase 0), `no-checkable-outcome` (Phase 1),
|
|
20
|
+
`insufficient-evidence` (Phases 2–3), `unclassified` (Phase 4), `bounded-authority-stop`
|
|
21
|
+
(Phase 5), and `headless-proposal-only`. A stop with no record on the work item is a bug in the
|
|
22
|
+
run, not a quiet success.
|
|
23
|
+
|
|
24
|
+
## Input — the trajectory
|
|
25
|
+
|
|
26
|
+
Accept the input as JSON or `key=value` fields. Exactly one of the first two is required.
|
|
27
|
+
|
|
28
|
+
- `item_ref` — a work-item ref: tracker URL/key, PR URL, or session/run ref. Resolve in order:
|
|
29
|
+
- **tracker key/URL** → `lisa-tracker-read` for the full context bundle (comments, linked
|
|
30
|
+
PRs, status history). This is also the **originating item** the result record posts to.
|
|
31
|
+
- **PR URL** → `gh pr view <pr-url-or-number> --json number,title,body,commits,files,reviews,comments`;
|
|
32
|
+
the originating item is the tracker item the PR links to, else the PR itself.
|
|
33
|
+
- **session/run ref** (CI run URL, automation run id, transcript path) → read the run or
|
|
34
|
+
transcript directly; the originating item is the tracker item it names, else `none`.
|
|
35
|
+
- `observed_failure` — a described failure in prose when no ref exists. The description IS the
|
|
36
|
+
baseline claim; Phase 2 must still find at least one durable artifact (commit, log, PR,
|
|
37
|
+
comment) corroborating it, or the loop stops with `Verdict: insufficient-evidence`.
|
|
38
|
+
- `job_class` — optional short slug naming the class of job (e.g. `implement-leaf-ticket`,
|
|
39
|
+
`verify-prd`). Derived in Phase 1 when absent.
|
|
40
|
+
- `mode` — optional `interactive` (default) | `headless`. See "Headless-safe mode".
|
|
41
|
+
|
|
42
|
+
**No originating item** (a bare `observed_failure` with no tracker item): run the Phase 0
|
|
43
|
+
marker search FIRST (see "Idempotency"); adopt any marker-bearing item found as the originating
|
|
44
|
+
item. Only when the search finds nothing, file ONE tracker item via `lisa-tracker-write`
|
|
45
|
+
(`issue_type: Task`, label `type:harness`) carrying the job contract, and that item becomes the
|
|
46
|
+
originating item. The result record is never posted nowhere, and a re-invocation never mints a
|
|
47
|
+
second item for the same trajectory.
|
|
48
|
+
|
|
49
|
+
**Missing tool access** at any point (no `gh`, no tracker credentials, no worktree): follow the
|
|
50
|
+
`tool-access-gate` rule's break-out protocol — report the missing access on the work item and
|
|
51
|
+
stop. Never substitute a weaker step.
|
|
52
|
+
|
|
53
|
+
## Phase 0 — Idempotency check
|
|
54
|
+
|
|
55
|
+
Before anything else: compute the fingerprint (see "Idempotency"), search for the marker —
|
|
56
|
+
on the originating item's comments when one was supplied, and across the tracker when one was
|
|
57
|
+
not — and stop with `already-improved` on a match (posting nothing new; the existing record
|
|
58
|
+
stands). Nothing in Phases 1–8 runs on a duplicate invocation.
|
|
59
|
+
|
|
60
|
+
## Phase 1 — Record the job contract
|
|
61
|
+
|
|
62
|
+
Write the job-contract block into the result-record draft. This is the loop's frame of
|
|
63
|
+
reference: everything later is measured against it. **The base revision is pinned here** — the
|
|
64
|
+
rerun in Phase 7 uses this exact revision, not `HEAD`.
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
[lisa-improve-harness] Job contract
|
|
68
|
+
Target: <repo / harness surface under improvement>
|
|
69
|
+
Revision: <base git sha> Lisa: <version or plugin stamp>
|
|
70
|
+
Worker config: <agent type / model / runtime / skill+plugin set that ran the job>
|
|
71
|
+
Representative job: <job_class> — <the exact input: ticket ref or prompt that stands for the class>
|
|
72
|
+
Accepted outcome: <what "done correctly" means, observable and checkable by someone who did not run it>
|
|
73
|
+
Evidence: <typed [EVIDENCE: <artifact-type>: <name>] markers proving the outcome>
|
|
74
|
+
Authority envelope:
|
|
75
|
+
- may change: <surfaces this loop may edit directly>
|
|
76
|
+
- may only propose against: <surfaces requiring a proposed-intervention ticket>
|
|
77
|
+
- upstream lane: <lisa | project | n/a>
|
|
78
|
+
Budget: 1 initial intervention + at most 1 revised attempt + their reruns
|
|
79
|
+
+ 1 optional test-without rerun; wall-clock/token bound: <bound>
|
|
80
|
+
Stop conditions: bounded-authority breach | unclassified gap | missing tool access
|
|
81
|
+
(tool-access-gate) | insufficient baseline evidence | budget exhausted
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
If the accepted outcome cannot be stated observably ("done correctly" is not checkable by
|
|
85
|
+
someone who did not run the job), stop: `Verdict: insufficient-evidence`, reason
|
|
86
|
+
`no-checkable-outcome`, and post the record. An unfalsifiable contract makes every later phase
|
|
87
|
+
unfalsifiable too.
|
|
88
|
+
|
|
89
|
+
## Phase 2 — Observe the baseline trajectory
|
|
90
|
+
|
|
91
|
+
Reconstruct what actually happened, from artifacts only — never from reconstruction-by-
|
|
92
|
+
plausibility. Sources, in priority order:
|
|
93
|
+
|
|
94
|
+
1. The run/session transcript.
|
|
95
|
+
2. The PR: diff, commits (especially late `fix:` / `revert:` follow-ups), review threads.
|
|
96
|
+
3. Tracker comments and status history.
|
|
97
|
+
4. The `git-history-analyzer` agent for the surrounding file evolution.
|
|
98
|
+
5. CI logs.
|
|
99
|
+
|
|
100
|
+
Per the `empirical-inquiry` rule, every claim about what the worker did or knew cites a concrete
|
|
101
|
+
artifact. Record which sources were reachable and which were not — an unreachable source is a
|
|
102
|
+
stated limit in the result record, never a silent gap.
|
|
103
|
+
|
|
104
|
+
## Phase 3 — Locate the earliest failed handoff
|
|
105
|
+
|
|
106
|
+
A **handoff** is any point where work, information, or authority moves: intake → plan,
|
|
107
|
+
plan → ticket, ticket → worker, worker → gate, gate → next worker, worker → human.
|
|
108
|
+
|
|
109
|
+
Walk the baseline forward and name the **first** handoff whose output was already wrong,
|
|
110
|
+
incomplete, or unusable — not the point where the failure became visible. Record: the handoff
|
|
111
|
+
(from → to), the artifact that crossed it, what was wrong with it, and the citation.
|
|
112
|
+
|
|
113
|
+
Downstream symptoms are explicitly noted as symptoms of this handoff, not as separate findings.
|
|
114
|
+
If two handoffs are genuinely tied, take the earlier one. If the earliest cannot be established
|
|
115
|
+
from artifacts, stop with `Verdict: insufficient-evidence` and post the record.
|
|
116
|
+
|
|
117
|
+
## Phase 4 — Classify the gap
|
|
118
|
+
|
|
119
|
+
Classify the earliest failed handoff into **exactly one** taxonomy gap, with cited evidence.
|
|
120
|
+
|
|
121
|
+
| Gap | Definition |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `context` | The worker had the tools, ownership, and authority to do the step but lacked a fact it needed — a spec detail, convention, prior decision, or state of the world — at the moment it acted. |
|
|
124
|
+
| `capability` | The worker lacked a tool, command, skill, credential, or environment the step actually required, and proceeded degraded instead of stopping. |
|
|
125
|
+
| `domain-ownership` | The step crossed into a surface no configured worker owns, so the handoff had no responsible recipient and fell through. |
|
|
126
|
+
| `authority` | The worker knew what to do and could do it, but was not permitted to (gate, protected environment, approval boundary) and worked around the boundary instead of breaking out. |
|
|
127
|
+
| `proof` | The output was genuinely wrong and no gate, test, or check existed that would have observed that class of defect. |
|
|
128
|
+
| `feedback-delivery` | A signal that would have caught it did exist, but never reached the worker in a usable form or in time — buried in a log, emitted as a non-blocking warning, or produced after the decision was already made. |
|
|
129
|
+
| `worker-limitation` | The worker itself could not perform the step even with full context, tools, ownership, authority, proof, and feedback — the other six are affirmatively excluded. |
|
|
130
|
+
|
|
131
|
+
**The worker-limitation multi-failure guard (binding).** `worker-limitation` requires **≥2
|
|
132
|
+
comparable failed trajectories** — same job class, same handoff, same failed step, different
|
|
133
|
+
runs — each cited by ref, AND an explicit exclusion line for each of the other six gaps. A
|
|
134
|
+
single trajectory can **never** establish `worker-limitation`; this skill has exactly one
|
|
135
|
+
trajectory by construction, so reaching this classification requires citing prior recorded
|
|
136
|
+
trajectories. Find them by searching the originating repo/tracker for prior markers carrying the
|
|
137
|
+
same `job_class=<slug>` field (the marker, not prose — see "Idempotency"). When the second
|
|
138
|
+
comparable failure cannot be produced, classify as the best-supported of the other six, or
|
|
139
|
+
`unclassified`.
|
|
140
|
+
|
|
141
|
+
`unclassified` is a **surfaced terminal outcome**, never a silent default: the loop stops, posts
|
|
142
|
+
the result record with `Verdict: unclassified`, and no intervention is made. Guessing a gap to
|
|
143
|
+
avoid this outcome is forbidden.
|
|
144
|
+
|
|
145
|
+
**`lisa-attribute-failure` runs here.** Invoke it (Skill tool) on the failed handoff — `defect`,
|
|
146
|
+
`implicated_files`, `surface_in_play`, `failure_class` seeded from Phases 2–3 — to decide
|
|
147
|
+
whether the owning surface is **Lisa's** or the **project's**. That verdict does not choose the
|
|
148
|
+
taxonomy gap; it chooses the *owner* in Phase 5:
|
|
149
|
+
|
|
150
|
+
- `project` → the owner is a project surface; local intervention is in scope.
|
|
151
|
+
- `lisa` **and we are in a host project** → per the `upstream-to-lisa` rule the fix belongs
|
|
152
|
+
upstream. Do not edit Lisa-managed surfaces from the host: **submit** the finding to
|
|
153
|
+
`lisa-persist-learning` as a candidate whose evidence supports the `handoff-upstream`
|
|
154
|
+
disposition — that skill's hostile-default judge decides the disposition and owns the filing,
|
|
155
|
+
dedupe marker, per-run cap, and redaction; it is not caller-selectable, and it opens its own
|
|
156
|
+
branch/PR distinct from `harness/<fingerprint>`. Terminate with
|
|
157
|
+
`Verdict: bounded-authority-stop` and `Decision: n/a (routed upstream, <url>)`. If the judge
|
|
158
|
+
drops the candidate, record that in `Known limits` — never report it as routed or owned. Any
|
|
159
|
+
local stopgap is recorded as a stopgap, never as the intervention under test.
|
|
160
|
+
- `lisa` **and we are inside `CodySwannGT/lisa`** → the `upstream-to-lisa` rule does not apply;
|
|
161
|
+
the owning surface is local (`plugins/src/...`) and the intervention proceeds normally.
|
|
162
|
+
- `ambiguous` → terminal-local; no upstream filing. Continue only if a project-owned surface can
|
|
163
|
+
still be named; otherwise `unclassified`.
|
|
164
|
+
|
|
165
|
+
## Phase 5 — The smallest owning intervention (bounded authority)
|
|
166
|
+
|
|
167
|
+
**Authoritative owner by gap** — the intervention lands where the gap lives, never where the
|
|
168
|
+
symptom appeared:
|
|
169
|
+
|
|
170
|
+
| Gap | Authoritative owner |
|
|
171
|
+
|---|---|
|
|
172
|
+
| `context` | The knowledge surface that should have carried the fact — wiki page, ticket/PRD template, the relevant rule, or a candidate submitted to `lisa-persist-learning` |
|
|
173
|
+
| `capability` | Tool/credential provisioning (a `type:tooling` ticket) or the skill that should have wrapped the tool |
|
|
174
|
+
| `domain-ownership` | The worker roster / routing config that assigns the surface |
|
|
175
|
+
| `authority` | The gate or authority-envelope configuration that should have stopped the worker |
|
|
176
|
+
| `proof` | The missing gate, test, lint, or ast-grep control (see the `promotion-contract` rule when prose is being replaced by a control) |
|
|
177
|
+
| `feedback-delivery` | Where the signal is emitted, escalated, or blocked — severity, timing, or delivery surface |
|
|
178
|
+
| `worker-limitation` | No local intervention; upstream/roster decision only |
|
|
179
|
+
|
|
180
|
+
**Smallest owning change** = the minimal edit at that one owner that closes this gap and nothing
|
|
181
|
+
else. An intervention is **larger than the smallest owning change** — and therefore out of
|
|
182
|
+
authority — if any of these hold:
|
|
183
|
+
|
|
184
|
+
1. It touches more than one owning surface.
|
|
185
|
+
2. It changes a contract other workers depend on (a shared schema, a status/label vocabulary, a
|
|
186
|
+
skill's input/output shape).
|
|
187
|
+
3. It requires a new tool, dependency, credential, or environment.
|
|
188
|
+
4. It changes product behavior, not harness behavior.
|
|
189
|
+
5. It falls outside the authority envelope recorded in the job contract.
|
|
190
|
+
|
|
191
|
+
**On any of those: file a proposed-intervention ticket via `lisa-tracker-write` and STOP.** The
|
|
192
|
+
ticket carries the job contract, the earliest failed handoff, the gap classification with
|
|
193
|
+
evidence, and the proposed change with its expected mechanism; labels `type:harness`,
|
|
194
|
+
`status:blocked` (human-flipped to `status:ready` when approved). Post the result record with
|
|
195
|
+
`Verdict: bounded-authority-stop`, `Decision: n/a (proposed-intervention, <url>)`, and
|
|
196
|
+
terminate. Implementing it anyway is the failure mode this phase exists to prevent.
|
|
197
|
+
|
|
198
|
+
Otherwise: make the change on a branch (`harness/<fingerprint>`), never a direct commit to the
|
|
199
|
+
default branch, and state the **expected mechanism** — the specific causal chain by which this
|
|
200
|
+
change makes the failed handoff succeed — *before* verifying. An intervention with no stated
|
|
201
|
+
mechanism cannot be relevance-gated in Phase 7.
|
|
202
|
+
|
|
203
|
+
A durable lesson produced along the way is **submitted** to `lisa-persist-learning` as a
|
|
204
|
+
candidate; its judge decides whether anything persists. This skill never writes the learnings
|
|
205
|
+
surface itself and never assumes the candidate was kept.
|
|
206
|
+
|
|
207
|
+
## Phase 6 — Two-layer verification
|
|
208
|
+
|
|
209
|
+
Both layers, in order, per the `verification` rule:
|
|
210
|
+
|
|
211
|
+
- **Layer 1 — native gates.** The project's own lint/typecheck/test/build for the changed
|
|
212
|
+
surface, plus (in the Lisa repo) `bun run build:plugins` + `bun run check:plugins` when the
|
|
213
|
+
surface is under `plugins/src/`. These are **quality checks, not verification** — the
|
|
214
|
+
`verification` rule is explicit that a green suite is a prerequisite and never the proof.
|
|
215
|
+
- **Layer 2 — the operational journey.** Exercise the harness the way the factory does: run the
|
|
216
|
+
representative job (or the smallest faithful slice of it) and observe the previously failing
|
|
217
|
+
handoff now producing a usable output. Delegate to `lisa-verification-lifecycle` where the
|
|
218
|
+
surface has one. Capture typed `[EVIDENCE: <artifact-type>: <name>]` artifacts from the
|
|
219
|
+
`verification` rule's fixed taxonomy.
|
|
220
|
+
|
|
221
|
+
Layer 1 red → fix or revert; never proceed to Phase 7 on red gates.
|
|
222
|
+
|
|
223
|
+
**Layer 2 unrunnable caps the Decision at `revise`, whatever Phase 7 returns** — a rerun cannot
|
|
224
|
+
promote an unverified journey to `retain`. Record the cap and its reason in `Known limits`, and
|
|
225
|
+
never claim a journey that was not run.
|
|
226
|
+
|
|
227
|
+
For a `proof`-gap intervention, `lisa-codify-verification` applies: the new control is the
|
|
228
|
+
codification.
|
|
229
|
+
|
|
230
|
+
## Phase 7 — Fresh-session rerun + the relevance gate
|
|
231
|
+
|
|
232
|
+
1. **Isolated starting state.** `git worktree add` off the base revision pinned in Phase 1, with
|
|
233
|
+
the intervention applied — and only the intervention. No investigator working-tree state
|
|
234
|
+
leaks in. Remove the worktree in a `finally`-equivalent step.
|
|
235
|
+
2. **Fresh session.** Rerun in a session with no inherited context: a subagent where the runtime
|
|
236
|
+
provides one, otherwise a headless CLI re-invocation of the same runtime. The rerun session
|
|
237
|
+
receives the representative job and the worker config from the job contract — **not** the
|
|
238
|
+
investigation, not the gap classification, not the intervention's existence. Telling it about
|
|
239
|
+
the intervention contaminates the only evidence this phase produces.
|
|
240
|
+
3. **Same job class, same worker config.** Any deviation from the job contract is recorded as a
|
|
241
|
+
limit.
|
|
242
|
+
|
|
243
|
+
**The relevance gate (binding).** A rerun credits the intervention **only** if the rerun
|
|
244
|
+
transcript shows the intervention was **retrieved or invoked** — the changed file was read, the
|
|
245
|
+
skill was called, the gate fired, the new message was surfaced, the added test ran. Positive
|
|
246
|
+
evidence is required; absence of evidence is not evidence. The gate applies to every rerun
|
|
247
|
+
outcome, not only the successful ones.
|
|
248
|
+
|
|
249
|
+
- Rerun **succeeded** and the intervention **was** retrieved/invoked →
|
|
250
|
+
`Verdict: intervention-supported`.
|
|
251
|
+
- Rerun **succeeded** and the intervention was **not** retrieved/invoked →
|
|
252
|
+
`Verdict: no-evidence-for-intervention`. **Never `retain`.** The success is attributed to
|
|
253
|
+
run-to-run variance until proven otherwise, and the honest next action is
|
|
254
|
+
`Decision: test-without` — rerun with the intervention deliberately withheld to see whether
|
|
255
|
+
the local evidence already suffices.
|
|
256
|
+
- Rerun **failed at the same handoff** → the intervention did not close the gap →
|
|
257
|
+
`Verdict: intervention-refuted`, `Decision: remove` (or `revise` when the mechanism was right
|
|
258
|
+
and the surface was wrong).
|
|
259
|
+
- Rerun **failed at a later handoff, with the relevance gate satisfied** → this gap closed and a
|
|
260
|
+
new one exists → `Verdict: intervention-supported`, `Decision: retain` for this gap, and the
|
|
261
|
+
new handoff is a *separate* trajectory: file it, do not chain a second loop inside this one.
|
|
262
|
+
Without the relevance gate, this case is `no-evidence-for-intervention` like any other.
|
|
263
|
+
|
|
264
|
+
## Phase 8 — Decision, result record, learnings
|
|
265
|
+
|
|
266
|
+
Two fields, deliberately separate:
|
|
267
|
+
|
|
268
|
+
- `Verdict` (evidence status): `intervention-supported` | `intervention-refuted` |
|
|
269
|
+
`no-evidence-for-intervention` | `insufficient-evidence` | `unclassified` |
|
|
270
|
+
`bounded-authority-stop` | `headless-proposal-only`
|
|
271
|
+
- `Decision` (action): `retain` | `revise` | `remove` | `test-without`. A completed loop always
|
|
272
|
+
carries exactly one. Early terminations (`insufficient-evidence`, `unclassified`,
|
|
273
|
+
`bounded-authority-stop`, `headless-proposal-only`) carry `Decision: n/a (<reason>, <url>)`,
|
|
274
|
+
because the loop did not complete.
|
|
275
|
+
|
|
276
|
+
| Verdict | Rerun outcome | Decision |
|
|
277
|
+
|---|---|---|
|
|
278
|
+
| `intervention-supported` | succeeded, intervention invoked | `retain` — merge the branch through `lisa-git-submit-pr` |
|
|
279
|
+
| `intervention-supported` | failed at a later handoff (this gap closed) — relevance gate satisfied | `retain` (this gap) + file the new trajectory |
|
|
280
|
+
| `no-evidence-for-intervention` | succeeded, intervention never invoked | `test-without` |
|
|
281
|
+
| `intervention-refuted` | failed at the same handoff, mechanism wrong | `remove` — revert the branch |
|
|
282
|
+
| `intervention-refuted` | failed at the same handoff, mechanism right / surface wrong | `revise` — one revised attempt inside budget, else file a proposed-intervention ticket |
|
|
283
|
+
|
|
284
|
+
A Layer-2 journey that could not be run caps any of the above at `revise`.
|
|
285
|
+
|
|
286
|
+
### `test-without` is deferred, not done
|
|
287
|
+
|
|
288
|
+
`test-without` leaves the loop **explicitly unfinished**: the branch stays unmerged, no PR is
|
|
289
|
+
opened, and nothing is claimed for the intervention. The follow-up is a re-invocation of this
|
|
290
|
+
skill on the same trajectory that posts under `key=<fingerprint>-r<N>` and runs the rerun with
|
|
291
|
+
the intervention deliberately **withheld**. Map its outcome:
|
|
292
|
+
|
|
293
|
+
| Withheld rerun | Reading | Decision |
|
|
294
|
+
|---|---|---|
|
|
295
|
+
| Fails the same way | The intervention was never what mattered — the original success was variance | `remove` |
|
|
296
|
+
| Succeeds without the intervention | The pre-existing state already sufficed | `remove` |
|
|
297
|
+
| Fails without it, where the earlier run with it succeeded | The intervention plausibly mattered after all | `retain` |
|
|
298
|
+
|
|
299
|
+
Until that follow-up runs, the trajectory's `What happens next` line says so explicitly.
|
|
300
|
+
|
|
301
|
+
### The result record
|
|
302
|
+
|
|
303
|
+
Post it to the originating item, with its marker:
|
|
304
|
+
|
|
305
|
+
```text
|
|
306
|
+
<!-- [lisa-improve-harness] key=<fingerprint> job_class=<slug> -->
|
|
307
|
+
[lisa-improve-harness] Result record (job class: <job_class>)
|
|
308
|
+
|
|
309
|
+
Target: <repo / harness surface under improvement>
|
|
310
|
+
Worker config: <agent type / model / runtime / skill+plugin set that ran the job>
|
|
311
|
+
Accepted outcome: <what "done correctly" meant for this job, verbatim from the job contract>
|
|
312
|
+
Gap: <gap> — <one plain-language sentence a non-technical operator can read>
|
|
313
|
+
Baseline evidence: <2-4 lines, each citing a concrete artifact (transcript line, commit sha, PR review, log)>
|
|
314
|
+
Earliest failed handoff: <from> -> <to>; artifact <what crossed>; wrong because <...>
|
|
315
|
+
Owner: <authoritative owner surface, path or name> (attribution: <lisa | project | ambiguous>)
|
|
316
|
+
Intervention: <the smallest owning change, with path> | none (<reason>)
|
|
317
|
+
Expected mechanism: <the causal chain by which this change makes the handoff succeed>
|
|
318
|
+
Change: <PR url | branch harness/<fingerprint> (unmerged) | none>
|
|
319
|
+
Verification:
|
|
320
|
+
- native gates: <commands run + result>
|
|
321
|
+
- operational journey: <what was run, what was observed, evidence artifacts>
|
|
322
|
+
Fresh rerun: worktree @ <base sha>, fresh session, same worker config
|
|
323
|
+
- outcome: <succeeded | failed at same handoff | failed at later handoff | not run (<why>)>
|
|
324
|
+
- relevance gate: <retrieved/invoked — cited proof> | <not retrieved/invoked>
|
|
325
|
+
Verdict: <intervention-supported | intervention-refuted | no-evidence-for-intervention | insufficient-evidence | unclassified | bounded-authority-stop | headless-proposal-only>
|
|
326
|
+
Decision: <retain | revise | remove | test-without> — <inline plain gloss> | n/a (<reason>, <url>)
|
|
327
|
+
What this means: <one plain sentence, no taxonomy terms>
|
|
328
|
+
What happens next: <concrete action + WHO (agent | human), or "nothing — closed">
|
|
329
|
+
Recorded owner: <who/what surface now owns this behavior>
|
|
330
|
+
Known limits: <what this record does NOT establish — always non-empty. This does not mean the
|
|
331
|
+
factory is fixed — one run, one job, one step.>
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
The `Decision` gloss is written for someone who has never read this skill, e.g.
|
|
335
|
+
`test-without — not yet convinced the fix is what helped; re-run once without it to check`,
|
|
336
|
+
`retain — the fix was used and the step worked; keeping it`,
|
|
337
|
+
`remove — the fix did not help; taking it back out`,
|
|
338
|
+
`revise — the idea looks right but this version did not work; one more attempt`.
|
|
339
|
+
|
|
340
|
+
Any durable lesson the loop produced is **submitted** to `lisa-persist-learning` (the ledger's
|
|
341
|
+
only write path per the `project-learnings` rule) as a candidate; its hostile-default judge — not
|
|
342
|
+
this skill, and not the caller — decides the disposition. A dropped candidate is recorded in
|
|
343
|
+
`Known limits`, never reported as routed or owned. This skill never writes the learnings file,
|
|
344
|
+
`PROJECT_RULES.md`, or `CLAUDE.md` itself, and never promotes a learning to a higher rung (that
|
|
345
|
+
is the gardener's ticket-gated job).
|
|
346
|
+
|
|
347
|
+
## Idempotency
|
|
348
|
+
|
|
349
|
+
The fingerprint is keyed to the **trajectory alone**, deliberately independent of the work item,
|
|
350
|
+
so it stays stable when this skill has to file the originating item itself:
|
|
351
|
+
|
|
352
|
+
```text
|
|
353
|
+
fingerprint = "ih1-" + first 12 hex chars of sha1(normalized_trajectory_ref)
|
|
354
|
+
normalized_trajectory_ref = lowercased, whitespace runs collapsed to single spaces, trimmed
|
|
355
|
+
trajectory_ref = the failing run identifier (PR url/number, CI run URL, session/transcript id);
|
|
356
|
+
when none exists, the normalized `observed_failure` text
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
NORM_TRAJ=$(printf '%s' "$TRAJ_REF" | tr '[:upper:]' '[:lower:]' | tr -s '[:space:]' ' ' | sed 's/^ *//; s/ *$//')
|
|
361
|
+
FP="ih1-$(printf '%s' "$NORM_TRAJ" | { shasum -a 1 2>/dev/null || sha1sum; } | cut -c1-12)"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Marker discipline follows `lisa-persist-learning`: match on the **marker, never the title or
|
|
365
|
+
text**; **exactly one marker per body**; **never write a markerless body**.
|
|
366
|
+
|
|
367
|
+
**Dedupe before write** (Phase 0, and again immediately before posting):
|
|
368
|
+
|
|
369
|
+
1. **With an originating item**: read its comments and grep for the marker
|
|
370
|
+
(`gh issue view <n> --json comments --jq '.comments[].body'`, or the vendor comment read).
|
|
371
|
+
2. **Without one**: search the tracker before filing anything —
|
|
372
|
+
`gh issue list --state all --search '"[lisa-improve-harness] key=<fingerprint>" in:body' --json number,state,url`
|
|
373
|
+
(all states: a closed marker-bearing item still owns this trajectory). Adopt any match as the
|
|
374
|
+
originating item.
|
|
375
|
+
3. **Stale-index guard**: when the search returns nothing, also enumerate bodies directly
|
|
376
|
+
(`gh issue list --state all --json number,body`, plus the comment read above) and grep for
|
|
377
|
+
the marker before concluding no record exists.
|
|
378
|
+
4. **Anchor the match** on the literal `key=<fingerprint> ` — including the trailing space
|
|
379
|
+
before `job_class=` — so a follow-up `key=<fingerprint>-r1` never matches the base
|
|
380
|
+
fingerprint. When several records match a trajectory, the highest `-rN` is the current one.
|
|
381
|
+
5. Match found and its `Decision` is not `test-without` → report `already-improved` and stop;
|
|
382
|
+
make no mutation.
|
|
383
|
+
6. Match found and its `Decision` **is** `test-without` → a follow-up run is the recorded next
|
|
384
|
+
action: post under `key=<fingerprint>-r<N>`, where `N` = 1 + the count of existing markers
|
|
385
|
+
with the `<fingerprint>-r` prefix.
|
|
386
|
+
7. Branch and worktree names reuse the same key — `harness/<fingerprint>` for the first run and
|
|
387
|
+
`harness/<fingerprint>-r<N>` for follow-ups — so a re-entrant run collides with its own
|
|
388
|
+
artifacts instead of forking new ones.
|
|
389
|
+
8. Prefer markers in comments authored by the running identity; a marker from another identity
|
|
390
|
+
is still honored (safety over noise) but the record notes it was foreign.
|
|
391
|
+
|
|
392
|
+
## Headless-safe mode
|
|
393
|
+
|
|
394
|
+
Trigger, mechanically: `mode=headless` was passed explicitly, or the invocation context carries
|
|
395
|
+
an explicit automation marker (a cron/routine invocation, an intake or CI dispatch). Everything
|
|
396
|
+
else — including any human- or session-initiated run inside an agent harness — is
|
|
397
|
+
**interactive**. Terminal detection is not a trigger: agent harnesses routinely run without a
|
|
398
|
+
TTY, so a TTY test would make interactive mode unreachable.
|
|
399
|
+
|
|
400
|
+
In headless mode:
|
|
401
|
+
|
|
402
|
+
- **No mutation of the working tree, any managed surface, or the default branch.** Phase 5 does
|
|
403
|
+
not edit, branch, or commit; it *drafts* the smallest owning change and files it as a
|
|
404
|
+
proposed-intervention ticket via `lisa-tracker-write` (`type:harness`, `status:blocked`), with
|
|
405
|
+
the drafted diff sketch, the expected mechanism, and the verification plan.
|
|
406
|
+
- Phases 6 and 7 do not run (there is nothing applied to verify); the result record carries
|
|
407
|
+
`Verdict: headless-proposal-only`, `Decision: n/a (proposed-intervention, <url>)`, and a
|
|
408
|
+
`Known limits` line saying no rerun evidence exists. This verdict is deliberately distinct
|
|
409
|
+
from `bounded-authority-stop`, so an operator can tell "the fix was too big to make" from
|
|
410
|
+
"the automation never touches anything".
|
|
411
|
+
- **The only writes are the result record and the proposed-intervention ticket(s).** Anything
|
|
412
|
+
further requires a human flipping that ticket to `status:ready`, after which the normal
|
|
413
|
+
factory (or an interactive invocation) implements it.
|
|
414
|
+
- Never a prompt, never a question, never a blocked wait — anywhere in this skill, in either
|
|
415
|
+
mode.
|
|
416
|
+
|
|
417
|
+
Interactive mutation still never touches the default branch directly — it lands on
|
|
418
|
+
`harness/<fingerprint>` and ships through `lisa-git-submit-pr`.
|
|
419
|
+
|
|
420
|
+
## Bounded-claim discipline
|
|
421
|
+
|
|
422
|
+
The result record **may** claim:
|
|
423
|
+
|
|
424
|
+
- What this one trajectory did, with cited artifacts.
|
|
425
|
+
- Which handoff failed earliest in it, and which single gap the evidence supports.
|
|
426
|
+
- That the intervention was, or was not, retrieved/invoked in one fresh rerun of one job.
|
|
427
|
+
- That one rerun of this job class, at this revision, with this worker config, succeeded or
|
|
428
|
+
failed.
|
|
429
|
+
|
|
430
|
+
The result record **may not** claim:
|
|
431
|
+
|
|
432
|
+
- **`worker-limitation` from one trajectory.** One failure never establishes it — the
|
|
433
|
+
multi-failure guard is not a formality.
|
|
434
|
+
- **That the intervention caused a rerun success it was never retrieved for.** No-retrieval
|
|
435
|
+
success is `no-evidence-for-intervention`, full stop.
|
|
436
|
+
- **Any comparative or longitudinal claim** — "better than", "improved the harness", "reduced
|
|
437
|
+
failures by", "the model is worse at X", pass-rate or eval framing. Those need a population
|
|
438
|
+
and a control; this loop has one trajectory.
|
|
439
|
+
- **Generalization to other job classes, workers, repos, or revisions** than the ones pinned in
|
|
440
|
+
the job contract.
|
|
441
|
+
- **That a green Layer-1 gate proves anything about behavior** — quality checks are not
|
|
442
|
+
verification (`verification` rule).
|
|
443
|
+
|
|
444
|
+
`Known limits` is a **required, never-empty** field. A record with nothing in it is invalid on
|
|
445
|
+
its face, because a single-trajectory loop always has limits.
|
|
446
|
+
|
|
447
|
+
## Overlap boundaries
|
|
448
|
+
|
|
449
|
+
- **vs `lisa-attribute-failure`** — that skill answers one narrow question about a single event
|
|
450
|
+
(is this Lisa's fault or the project's) and is read-only; this skill **calls it** during
|
|
451
|
+
Phase 4 to pick the authoritative owner, and owns everything before and after it.
|
|
452
|
+
- **vs `lisa-rework-triage`** — that skill fires only on confirmed QA/staging bounces and
|
|
453
|
+
classifies the *previous agent attempt* into its six causes; this one is the generic
|
|
454
|
+
single-trajectory loop that runs on any failed or expensive run, bounce or not, and actually
|
|
455
|
+
makes and tests an intervention.
|
|
456
|
+
- **vs `lisa-debrief`** — that mines a whole shipped initiative across many tickets and PRs for
|
|
457
|
+
candidate learnings; this investigates exactly one trajectory in depth and proves a fix.
|
|
458
|
+
- **vs `lisa-persist-learning`** — that is the ledger's judged write path; this skill never
|
|
459
|
+
writes the learnings surface itself and submits every durable lesson (and every
|
|
460
|
+
Lisa-attributed upstream candidate) **to** it for judgment.
|
|
461
|
+
- **vs the gardener (`lisa-learnings-audit`)** — that is the periodic, ticket-gated
|
|
462
|
+
promotion/demotion/retirement pass over accumulated knowledge; out of scope here, and this
|
|
463
|
+
skill never promotes a learning to a higher rung.
|
|
464
|
+
|
|
465
|
+
## Rules
|
|
466
|
+
|
|
467
|
+
- **Headless-safe.** No interactive prompts anywhere, in either mode. Under an automation the
|
|
468
|
+
skill proposes and reports; it does not mutate the working tree, a managed surface, or the
|
|
469
|
+
default branch.
|
|
470
|
+
- **Never block.** A failed investigation, unreachable evidence, missing tooling, or an
|
|
471
|
+
unrunnable rerun degrades to a stated verdict with the gap named — it never raises an error
|
|
472
|
+
that stops the caller's build, intake, or verification flow.
|
|
473
|
+
- **Always leave a record.** Every terminal state posts a result record to the originating item
|
|
474
|
+
before stopping; there is no silent exit.
|
|
475
|
+
- **Evidence-cited.** Every claim about the baseline, the handoff, the gap, and the rerun names
|
|
476
|
+
a concrete artifact. An uncited classification is `unclassified`; an uncited rerun is
|
|
477
|
+
`not run`.
|
|
478
|
+
- **Idempotent per trajectory.** Same trajectory in → same fingerprint → no duplicate record, no
|
|
479
|
+
duplicate ticket, no duplicate branch. Dedupe before every write.
|
|
480
|
+
- **Bounded authority.** Direct change only at the single authoritative owner, only within the
|
|
481
|
+
recorded authority envelope, only on a branch, only through a PR. Anything larger is a
|
|
482
|
+
proposed-intervention ticket and a full stop.
|
|
483
|
+
- **Bounded claims.** One trajectory supports one trajectory's claim. No comparative,
|
|
484
|
+
longitudinal, or population claims; `Known limits` is never empty.
|
|
485
|
+
- **One write path for learnings.** Durable lessons are submitted to `lisa-persist-learning` for
|
|
486
|
+
judgment; this skill never edits the learnings ledger, `PROJECT_RULES.md`, or a rules tree,
|
|
487
|
+
and never promotes a learning to a higher rung.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lisa-jira-claim
|
|
3
|
+
description: "Idempotently claims one live Jira leaf ticket for direct Lisa work. Reuses jira-build-intake Phase 3b semantics through lisa-atlassian-access: configured ready-to-claimed transition, assign-only-if-unassigned, stable managed comment, and post-write verification."
|
|
4
|
+
allowed-tools: ["Bash", "Skill", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Claim Jira Ticket: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Claim exactly one canonical Jira key. All Jira access goes through `lisa-atlassian-access`; do not call MCP tools or `acli` directly. This is the reusable direct-session counterpart of `lisa-jira-build-intake` Phase 3b.
|
|
10
|
+
|
|
11
|
+
1. Resolve merged `atlassian.cloudId`, `jira.project`, and `jira.workflow` values from local-over-global config. Require the key's project prefix to equal the configured Jira project. Resolve ready, claimed, review, environment, and terminal roles from config; do not hardcode status decisions.
|
|
12
|
+
2. Invoke `lisa-jira-read-ticket <key>` immediately before mutation. Reject a resolved/terminal ticket, active blocker, `repo:<other>` ticket, any item with open children/subtasks, or an Epic per `repo-scope-split` and `leaf-only-lifecycle`.
|
|
13
|
+
3. Inspect the live workflow role:
|
|
14
|
+
- Already claimed, review, environment-done, or another configured later non-terminal role -> preserve it and set `claim_outcome: reused`.
|
|
15
|
+
- Ready or an unlaned backlog leaf -> invoke `lisa-atlassian-access operation: transition key: <key> to: <configured-claimed>` and require success. This is the idempotency lock.
|
|
16
|
+
- Terminal/resolved -> reject; never regress completed work.
|
|
17
|
+
4. If and only if the ticket is unassigned, assign it to the authenticated account through `lisa-atlassian-access` (prefer the identity-probed account id / `@me` semantics documented by Jira build intake). Leave an existing assignee untouched.
|
|
18
|
+
5. Post this stable comment once through `lisa-atlassian-access operation: comment`, deduped against all existing comments:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
[lisa-tracker-claim] Claimed by Lisa. Starting implementation.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
6. Invoke `lisa-jira-read-ticket <key>` again. Success requires an unresolved, current-repo leaf in claimed or a later non-terminal role. An unreachable transition or failed verification is a hard failure and must not authorize a binding.
|
|
25
|
+
7. Return `tracker_provider: jira`, canonical `work_item_ref: <KEY>`, `claim_outcome: claimed|reused`, assignee outcome, and the post-write status evidence.
|
|
26
|
+
|
|
27
|
+
Never create a ticket here. Never bypass `lisa-atlassian-access`.
|