@codyswann/lisa 2.256.0 → 2.256.1
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 +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-github-validate-issue/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +9 -3
- package/plugins/lisa/agents/github-agent.md +2 -2
- package/plugins/lisa/agents/jira-agent.md +2 -2
- package/plugins/lisa/agents/linear-agent.md +2 -2
- package/plugins/lisa/rules/eager/config-resolution.md +27 -8
- package/plugins/lisa/rules/eager/pre-flight-autofill.md +21 -7
- package/plugins/lisa/rules/reference/config-resolution.md +55 -16
- package/plugins/lisa/rules/reference/pre-flight-autofill.md +23 -8
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/lisa/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +9 -3
- package/plugins/lisa-agy/agents/github-agent.md +2 -2
- package/plugins/lisa-agy/agents/jira-agent.md +2 -2
- package/plugins/lisa-agy/agents/linear-agent.md +2 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +9 -3
- 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/github-agent.agent.md +2 -2
- package/plugins/lisa-copilot/agents/jira-agent.agent.md +2 -2
- package/plugins/lisa-copilot/agents/linear-agent.agent.md +2 -2
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +27 -8
- package/plugins/lisa-copilot/rules/eager/pre-flight-autofill.md +21 -7
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +55 -16
- package/plugins/lisa-copilot/rules/reference/pre-flight-autofill.md +23 -8
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +9 -3
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/github-agent.md +2 -2
- package/plugins/lisa-cursor/agents/jira-agent.md +2 -2
- package/plugins/lisa-cursor/agents/linear-agent.md +2 -2
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +55 -16
- package/plugins/lisa-cursor/rules/config-resolution.mdc +27 -8
- package/plugins/lisa-cursor/rules/pre-flight-autofill-reference.mdc +23 -8
- package/plugins/lisa-cursor/rules/pre-flight-autofill.mdc +21 -7
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +9 -3
- 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/github-agent.md +2 -2
- package/plugins/src/base/agents/jira-agent.md +2 -2
- package/plugins/src/base/agents/linear-agent.md +2 -2
- package/plugins/src/base/rules/eager/config-resolution.md +27 -8
- package/plugins/src/base/rules/eager/pre-flight-autofill.md +21 -7
- package/plugins/src/base/rules/reference/config-resolution.md +55 -16
- package/plugins/src/base/rules/reference/pre-flight-autofill.md +23 -8
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +9 -3
- package/plugins/src/base/skills/lisa-implement/SKILL.md +6 -2
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +9 -6
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +9 -3
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.256.
|
|
105
|
+
"version": "2.256.1",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -154,7 +154,7 @@ When `issue_type ∉ {Bug, Epic}`, `parent_ref` must be set — **except for a b
|
|
|
154
154
|
|
|
155
155
|
#### S8 — Target Backend Environment
|
|
156
156
|
|
|
157
|
-
When `runtime_behavior_change = true`, body must contain `## Target Backend Environment
|
|
157
|
+
When `runtime_behavior_change = true`, the body must contain `## Target Backend Environment`. Read accepted environments from the exact configured keys of `.lisa.config.json` `deploy.branches`, never from a hardcoded list. Accept a human-confirmed bare exact configured key or `Confirmed: <env>`, automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, automated `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` when no unique reverse-map exists. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence fails for confirmation. Validate the annotation shape/source and remote-default branch; validate `<env>` as an exact configured key whenever present. A valid branch-only assumption must not fail solely because its reverse-map is absent or ambiguous. Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases are valid. Skipped for doc-only / config-only / type-only / Epic.
|
|
158
158
|
|
|
159
159
|
#### S9 — Sign-in Required
|
|
160
160
|
|
|
@@ -38,7 +38,7 @@ Resolve `<ORG>` and `<REPO>` from the ref or from `.lisa.config.json`.
|
|
|
38
38
|
| Priority | CREATE | Label `priority:<low|medium|high|critical>`. |
|
|
39
39
|
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin in `## Acceptance Criteria` — see Phase 3. |
|
|
40
40
|
| Validation Journey | Runtime-behavior changes | Delegate to `/github-add-journey`. |
|
|
41
|
-
| Target backend environment | Runtime-behavior changes |
|
|
41
|
+
| Target backend environment | Runtime-behavior changes | For every work type, use an exact `deploy.branches` key when an environment is known. Human: bare key or `Confirmed: <env>`. Automation: `Inferred: <env> — evidence: <title\|body\|reproduction\|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. |
|
|
42
42
|
| Sign-in account / credentials | Authenticated-surface tickets | Recorded under `## Sign-in Required`. |
|
|
43
43
|
| Repository | Bug, Task, Sub-task | GitHub Issues live in exactly one repo by definition — record the repo name under `## Repository`, and reject any AC bullet that references a different repo. |
|
|
44
44
|
| Source Requirement | PRD-sourced issues (`prd_source` provided) | `## Source Requirement` with PRD link + verbatim requirement quote(s) — see Phase 3; enforced at every level, sub-issues included. |
|
|
@@ -91,8 +91,14 @@ Scenario: <name>
|
|
|
91
91
|
[Explicit list of what this issue does NOT cover. Forces scope discipline.]
|
|
92
92
|
|
|
93
93
|
## Target Backend Environment
|
|
94
|
-
[Required when the issue changes runtime behavior.
|
|
95
|
-
|
|
94
|
+
[Required when the issue changes runtime behavior. Use an exact
|
|
95
|
+
`deploy.branches` key. A human-confirmed value is a bare key or
|
|
96
|
+
`Confirmed: <env>`. An automated evidence write is
|
|
97
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated
|
|
98
|
+
generic default is `Assumption: <env> — remote default branch <branch>`.
|
|
99
|
+
Without a unique reverse-map use `Assumption: remote default branch <branch>`.
|
|
100
|
+
Human confirmation replaces the automated annotation with a bare key or
|
|
101
|
+
`Confirmed: <env>`. Skip only for doc/config/type-only issues.]
|
|
96
102
|
|
|
97
103
|
## Sign-in Required
|
|
98
104
|
[Include this section ONLY if the work touches authenticated surfaces.
|
|
@@ -84,8 +84,12 @@ Using the general-purpose agent in Team Lead session, Determine the name of this
|
|
|
84
84
|
|
|
85
85
|
Using the general-purpose agent in Team Lead session, **determine the base branch from the ticket's target environment, then sync the working branch onto the latest of it before any work** — so implementation always builds on current target-environment code:
|
|
86
86
|
|
|
87
|
-
1. **Resolve the target environment
|
|
88
|
-
|
|
87
|
+
1. **Resolve the target environment with durable provenance.** The `## Target Backend Environment` value has this exact grammar: a human-confirmed value is either a bare configured key or `Confirmed: <env>`; automated evidence writes `Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated fallback writes `Assumption: <env> — remote default branch <branch>` when the branch maps uniquely, or `Assumption: remote default branch <branch>` when it does not. Human confirmation replaces an automated annotation with the bare configured key or `Confirmed: <env>`. For a legacy bare value created before this grammar, use managed draft markers and current ticket content only — provider edit history is not required or assumed. A managed marker proves automation and requires rewriting to `Inferred:` or `Assumption:`; without a marker provenance is unknown, so the value may be used only when no conflicting evidence exists, and a conflict **stops for confirmation**.
|
|
88
|
+
- A human-confirmed value wins. Otherwise a validated `Inferred:` value is next.
|
|
89
|
+
- Otherwise inspect the human-authored title, body, and reproduction steps for exactly one unambiguous signal: an exact `deploy.branches` key as a complete token, or that key as a complete label in a URL hostname (`staging.<domain>`, `gql.staging.*`). Exclude the entire `Target Backend Environment` section and all other machine-authored metadata/draft blocks from this evidence scan so an `Inferred:` or `Assumption:` annotation can never validate or conflict with itself. Clear evidence may supersede only an `Assumption:` value, never a human-confirmed value.
|
|
90
|
+
- The only normalization is built-in `prod` ↔ `production`, and only when exactly one of those keys exists in `deploy.branches`; normalize to that configured key. No other aliases exist.
|
|
91
|
+
- Never infer from arbitrary branch text, URL paths or query strings, or substrings inside other words or hostname labels. Multiple conflicting signals after normalization **stop** the flow. If there are no signals, resolve the remote default branch (`gh repo view --json defaultBranchRef -q .defaultBranchRef.name`, or `git remote set-head origin -a` then `origin/HEAD`). When it reverse-maps uniquely, write the env-bearing `Assumption:` form; when the reverse-map is not unique, write the branch-only form and continue on the remote default without inventing an environment or blocking solely for that ambiguity. Record the fallback assumption in the plan/tracker artifact.
|
|
92
|
+
2. **Map the resolved environment to a base branch** through `.lisa.config.json` `deploy.branches` — the forward direction of the env-keyed `done` resolution. The selected exact configured key must map uniquely, and the mapped branch must exist on the remote. A missing/ambiguous mapping or remote branch **stops** the flow; never guess or silently fall back.
|
|
89
93
|
3. **Establish the feature branch off the latest base, conflict-free:**
|
|
90
94
|
- `git fetch origin`.
|
|
91
95
|
- Already on a feature branch with an **open PR** → reuse it. If the PR's base ≠ the resolved base branch, surface the mismatch and re-target only with confirmation — the ticket's environment is the source of truth.
|
|
@@ -155,7 +155,7 @@ When `issue_type ∉ {Bug, Epic}`, `parent_key` must be set — **except for a b
|
|
|
155
155
|
|
|
156
156
|
#### S8 — Target Backend Environment
|
|
157
157
|
|
|
158
|
-
When `runtime_behavior_change = true`, description must contain a `Target Backend Environment` section (`h2.` / `##` in proposed text, or an ADF heading in live JIRA)
|
|
158
|
+
When `runtime_behavior_change = true`, the description must contain a `Target Backend Environment` section (`h2.` / `##` in proposed text, or an ADF heading in live JIRA). Read accepted environments from the exact configured keys of `.lisa.config.json` `deploy.branches`, never from a hardcoded list. Accept a human-confirmed bare exact configured key or `Confirmed: <env>`, automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, automated `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` when no unique reverse-map exists. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence fails for confirmation. Validate the annotation shape/source and remote-default branch; validate `<env>` as an exact configured key whenever present. A valid branch-only assumption must not fail solely because its reverse-map is absent or ambiguous. Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases are valid. Skipped for doc-only / config-only / type-only / Epic.
|
|
159
159
|
|
|
160
160
|
#### S9 — Sign-in Required
|
|
161
161
|
|
|
@@ -35,7 +35,7 @@ Required fields (stop and ask if missing — do not invent values):
|
|
|
35
35
|
| Priority | CREATE | Default to project default if unstated |
|
|
36
36
|
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin — see Phase 3 |
|
|
37
37
|
| Validation Journey | Runtime-behavior changes | Delegate to `/jira-add-journey` |
|
|
38
|
-
| Target backend environment | Runtime-behavior changes | `
|
|
38
|
+
| Target backend environment | Runtime-behavior changes | For every work type, use an exact `deploy.branches` key when an environment is known. Human: bare key or `Confirmed: <env>`. Automation: `Inferred: <env> — evidence: <title\|body\|reproduction\|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. |
|
|
39
39
|
| Sign-in account / credentials | Tickets that touch authenticated surfaces | Name the account (or source — 1Password item, env var, seeded fixture) and role; recorded in description (Phase 3). Omit when sign-in is not required. |
|
|
40
40
|
| Single-repo scope | Bug, Task, Sub-task, Improvement | These leaf work units MUST cover one repo only. If the work crosses repos, split it before creating. Epic / Spike / Story may span repos. |
|
|
41
41
|
| Source Requirement | PRD-sourced tickets (`prd_source` provided) | `h2. Source Requirement` with PRD link + verbatim requirement quote(s) — see Phase 3; enforced at every level, sub-tasks included |
|
|
@@ -83,11 +83,14 @@ h2. Out of Scope
|
|
|
83
83
|
[Explicit list of what this ticket does NOT cover. Forces scope discipline.]
|
|
84
84
|
|
|
85
85
|
h2. Target Backend Environment
|
|
86
|
-
[Required when the ticket changes runtime behavior.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
[Required when the ticket changes runtime behavior. Use an exact
|
|
87
|
+
`deploy.branches` key. A human-confirmed value is a bare key or
|
|
88
|
+
`Confirmed: <env>`. An automated evidence write is
|
|
89
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated
|
|
90
|
+
generic default is `Assumption: <env> — remote default branch <branch>`.
|
|
91
|
+
Without a unique reverse-map use `Assumption: remote default branch <branch>`.
|
|
92
|
+
Human confirmation replaces the automated annotation with a bare key or
|
|
93
|
+
`Confirmed: <env>`. Skip only for doc/config/type-only tickets.]
|
|
91
94
|
|
|
92
95
|
h2. Sign-in Required
|
|
93
96
|
[Include this section ONLY if the work touches authenticated surfaces.
|
|
@@ -160,7 +160,7 @@ A **build-ready leaf work unit** that is not part of an Epic context stands alon
|
|
|
160
160
|
|
|
161
161
|
#### S8 — Target Backend Environment
|
|
162
162
|
|
|
163
|
-
When `runtime_behavior_change = true`, description must contain `## Target Backend Environment
|
|
163
|
+
When `runtime_behavior_change = true`, the description must contain `## Target Backend Environment`. Read accepted environments from the exact configured keys of `.lisa.config.json` `deploy.branches`, never from a hardcoded list. Accept a human-confirmed bare exact configured key or `Confirmed: <env>`, automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, automated `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` when no unique reverse-map exists. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence fails for confirmation. Validate the annotation shape/source and remote-default branch; validate `<env>` as an exact configured key whenever present. A valid branch-only assumption must not fail solely because its reverse-map is absent or ambiguous. Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases are valid. Skipped for doc-only / config-only / type-only / Epic.
|
|
164
164
|
|
|
165
165
|
#### S9 — Sign-in Required
|
|
166
166
|
|
|
@@ -57,7 +57,7 @@ Required fields (stop and ask if missing — never invent values):
|
|
|
57
57
|
| Priority | CREATE | Native Linear priority: 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low |
|
|
58
58
|
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin — see Phase 3 |
|
|
59
59
|
| Validation Journey | Runtime-behavior changes | Delegate to `/linear-add-journey` |
|
|
60
|
-
| Target backend environment | Runtime-behavior changes | `
|
|
60
|
+
| Target backend environment | Runtime-behavior changes | For every work type, use an exact `deploy.branches` key when an environment is known. Human: bare key or `Confirmed: <env>`. Automation: `Inferred: <env> — evidence: <title\|body\|reproduction\|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. |
|
|
61
61
|
| Sign-in account / credentials | Items that touch authenticated surfaces | Name the account (or source — 1Password item, env var, seeded fixture) and role; recorded in description. Omit when sign-in is not required. |
|
|
62
62
|
| Single-repo scope | Bug, Task, Sub-task | These types MUST cover one repo only. If the work crosses repos, split it before creating. Epic / Spike / Story may span repos. |
|
|
63
63
|
| Source Requirement | PRD-sourced Issues (`prd_source` provided) | `## Source Requirement` with PRD link + verbatim requirement quote(s) — see Phase 3; enforced at every level, sub-issues included. |
|
|
@@ -103,8 +103,14 @@ Linear descriptions are markdown (NOT Jira wiki markup — no `h2.` headings, us
|
|
|
103
103
|
[Explicit list of what this item does NOT cover. Forces scope discipline.]
|
|
104
104
|
|
|
105
105
|
## Target Backend Environment
|
|
106
|
-
[Required when the item changes runtime behavior.
|
|
107
|
-
|
|
106
|
+
[Required when the item changes runtime behavior. Use an exact
|
|
107
|
+
`deploy.branches` key. A human-confirmed value is a bare key or
|
|
108
|
+
`Confirmed: <env>`. An automated evidence write is
|
|
109
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated
|
|
110
|
+
generic default is `Assumption: <env> — remote default branch <branch>`.
|
|
111
|
+
Without a unique reverse-map use `Assumption: remote default branch <branch>`.
|
|
112
|
+
Human confirmation replaces the automated annotation with a bare key or
|
|
113
|
+
`Confirmed: <env>`. Skip only for doc/config/type-only items.]
|
|
108
114
|
|
|
109
115
|
## Sign-in Required
|
|
110
116
|
[Include this section ONLY if the work touches authenticated surfaces.
|
|
@@ -53,7 +53,7 @@ Resolve build labels from `.lisa.config.json` `github.labels.build.*` (defaults:
|
|
|
53
53
|
|
|
54
54
|
If `github-verify` returns `FAIL` on any of the above, do NOT continue to build. **Draft the missing spec content first, then block for confirmation** — never bounce a raw "go write all this" checklist back to the author:
|
|
55
55
|
|
|
56
|
-
1. **Best-effort autofill (before blocking).** Run
|
|
56
|
+
1. **Best-effort autofill (before blocking).** Run `pre-flight-autofill` for every work item. Preserve a human bare configured key or `Confirmed: <env>`; automation writes `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces the annotation with the bare key or `Confirmed: <env>`. For a legacy bare value, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Resolve one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname; exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. A reported bug environment is an example, not a restriction. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop; never infer from arbitrary branch text, URL paths/query strings, or substrings. Write through `github-write-issue`, never overwrite human prose, then re-run `github-verify`.
|
|
57
57
|
2. Relabel: remove the `claimed` label, add the `blocked` label **and** the `human_needed` marker label. Even after the agent drafted what it could, a pre-flight gate failure bounces the issue back to its author because it still needs a human to **confirm the drafted assumptions** or supply something no agent can invent — real missing credentials, access, or an irreducible product/scoping decision — so the marker tells a human scanning the board which blocked issues are waiting on them. The marker is additive to `blocked`, not a replacement. (See the `config-resolution` rule's "Build markers" for when the marker applies and when it must NOT.)
|
|
58
58
|
```bash
|
|
59
59
|
_read_cfg() { local lv gv; lv=$(jq -r "$1 // empty" .lisa.config.local.json 2>/dev/null); gv=$(jq -r "$1 // empty" .lisa.config.json 2>/dev/null); echo "${lv:-${gv}}"; }
|
|
@@ -152,4 +152,4 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
|
|
|
152
152
|
- Never create or materially edit an issue by calling `gh issue create` / `gh issue edit` directly — always delegate to `github-write-issue` (or, from a vendor-neutral caller, `tracker-write`) so relationships, Gherkin criteria, and metadata gates are enforced.
|
|
153
153
|
- If sign-in credentials are in the issue body, extract and pass them to the flow. If the issue touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
154
154
|
- If the issue has a `## Validation Journey` section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the body.
|
|
155
|
-
-
|
|
155
|
+
- The environment handoff for every work item uses the same durable grammar: human bare configured key or `Confirmed: <env>`; automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, managed draft markers and current ticket content decide provenance; provider edit history is not required. A marker proves automation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Human-confirmed wins, then validated `Inferred:`; otherwise one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname drives the implementation base branch. Exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop. Never infer from arbitrary branch text, URL paths/query strings, or substrings. With no signal, use the remote default and record the applicable assumption without blocking on a non-unique reverse-map. Require any selected mapping and remote branch. A reported bug environment is an example of the all-work-type rule. Non-integration fixes still require the linked forward cherry-pick.
|
|
@@ -48,7 +48,7 @@ Use the `jira-verify` skill to check the ticket against organizational standards
|
|
|
48
48
|
**Gating behavior — this is the one place auto-transitioning is allowed:**
|
|
49
49
|
|
|
50
50
|
If `jira-verify` returns `FAIL` on any of the above, do NOT continue to build. **Draft the missing spec content first, then block for confirmation** — never bounce a raw "go write all this" checklist back to the reporter:
|
|
51
|
-
1. **Best-effort autofill (before blocking).** Run
|
|
51
|
+
1. **Best-effort autofill (before blocking).** Run `pre-flight-autofill` for every work item. Preserve a human bare configured key or `Confirmed: <env>`; automation writes `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces the annotation with the bare key or `Confirmed: <env>`. For a legacy bare value, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Resolve one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname; exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. A reported bug environment is an example, not a restriction. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop; never infer from arbitrary branch text, URL paths/query strings, or substrings. Write through `jira-write-ticket`, never overwrite human prose, then re-run `jira-verify`.
|
|
52
52
|
2. Transition the ticket status to the configured `blocked` status (typically `Blocked` — read from `.lisa.config.json` `jira.workflow.blocked` if present, otherwise the project's standard blocked status). Use `mcp__atlassian__transitionJiraIssue` or equivalent.
|
|
53
53
|
3. **Add the `human_needed` marker label.** Even after the agent drafted what it could, a pre-flight gate failure bounces the ticket back to its reporter because the ticket still needs a human to **confirm the drafted assumptions** or supply something no agent can invent — real missing credentials, access, or an irreducible product/scoping decision. Add the configured label (`jira.labels.human_needed`, default `Human Needed`) to the ticket's `labels` field via `mcp__atlassian__editJiraIssue` — a lightweight metadata update permitted under this same gate exception. This is additive to (not a replacement for) the `blocked` status, so a human scanning the board sees at a glance which blocked tickets are waiting on them. If the label does not exist in the project, record that and proceed — the marker is best-effort. (See the `config-resolution` rule's "Build markers" for when the marker applies and when it must NOT.)
|
|
54
54
|
4. Reassign the ticket to the **Reporter** (the human who filed it — not the Creator field, which may be a bot/integration).
|
|
@@ -132,4 +132,4 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
|
|
|
132
132
|
- Never create or materially edit a ticket by calling MCP write tools directly — always delegate to `jira-write-ticket` so relationships, Gherkin criteria, and metadata gates are enforced
|
|
133
133
|
- If sign-in credentials are in the ticket, extract and pass them to the flow. If the ticket touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
134
134
|
- If the ticket has a Validation Journey section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the description (for FE work, that's the deployed backend QA reported against).
|
|
135
|
-
-
|
|
135
|
+
- The environment handoff for every work item uses the same durable grammar: human bare configured key or `Confirmed: <env>`; automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, managed draft markers and current ticket content decide provenance; provider edit history is not required. A marker proves automation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Human-confirmed wins, then validated `Inferred:`; otherwise one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname drives the implementation base branch. Exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop. Never infer from arbitrary branch text, URL paths/query strings, or substrings. With no signal, use the remote default and record the applicable assumption without blocking on a non-unique reverse-map. Require any selected mapping and remote branch. A reported bug environment is an example of the all-work-type rule. Non-integration fixes still require the linked forward cherry-pick.
|
|
@@ -50,7 +50,7 @@ Use the `linear-verify` skill to check the item against organizational standards
|
|
|
50
50
|
Resolve build labels from `.lisa.config.json` `linear.labels.build.*` (defaults: `status:ready` / `status:in-progress` / `status:code-review`); resolve the `blocked` label from the same section (`linear.labels.build.blocked`, default `status:blocked`) and the `human_needed` marker label from the same section (`linear.labels.build.human_needed`, default `human-needed`).
|
|
51
51
|
|
|
52
52
|
If `linear-verify` returns `FAIL` on any of the above, do NOT continue to build. **Draft the missing spec content first, then block for confirmation** — never bounce a raw "go write all this" checklist back to the creator:
|
|
53
|
-
1. **Best-effort autofill (before blocking).** Run
|
|
53
|
+
1. **Best-effort autofill (before blocking).** Run `pre-flight-autofill` for every work item. Preserve a human bare configured key or `Confirmed: <env>`; automation writes `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces the annotation with the bare key or `Confirmed: <env>`. For a legacy bare value, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Resolve one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname; exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. A reported bug environment is an example, not a restriction. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop; never infer from arbitrary branch text, URL paths/query strings, or substrings. Write through `linear-write-issue`, never overwrite human prose, then re-run `linear-verify`.
|
|
54
54
|
2. Update labels via `lisa-linear-access operation: save-issue`: remove the current build label, add the configured `blocked` label **and** the configured `human_needed` marker label. (Create either label via `create_issue_label` if needed.) Even after the agent drafted what it could, a pre-flight gate failure bounces the item back to its creator because it still needs a human to **confirm the drafted assumptions** or supply something no agent can invent — real missing credentials, access, or an irreducible product/scoping decision — so the marker tells a human scanning the board which blocked items are waiting on them. The marker is additive to `blocked`, not a replacement. (See the `config-resolution` rule's "Build markers" for when the marker applies and when it must NOT.)
|
|
55
55
|
3. Reassign the item to the **Issue creator** (the human who filed it — Linear's `creator` field).
|
|
56
56
|
4. Post the **confirmation comment** from the `pre-flight-autofill` rule via `lisa-linear-access operation: save-comment`, **not** a bare remediation checklist: disclose it is a Claude draft, give one line per drafted section naming the key assumption made, list any remaining human-only item as a specific question with a recommended default, and close with *"review the drafted sections, correct anything wrong, then flip back to Ready and it builds — or reply with corrections."* Prefix with `[{repo}]`.
|
|
@@ -135,4 +135,4 @@ The label transitions ARE the canonical signal. The native `state` field stays a
|
|
|
135
135
|
- Never create or materially edit an item by calling MCP write tools directly — always delegate to `linear-write-issue` so relationships, Gherkin criteria, and metadata gates are enforced. Two explicit exceptions are permitted: (1) the Step 2 pre-flight failure path (when `linear-verify` returns `FAIL`) may call `lisa-linear-access operation: save-issue` and `lisa-linear-access operation: save-comment` directly to set `status:blocked`, add the configured `human_needed` marker label, and reassign to the creator — this narrow exception is already granted by the rule above; (2) the Step 3 triage path may call `lisa-linear-access operation: save-comment` to post triage findings and `lisa-linear-access operation: save-issue` to add the `claude-triaged-{repo}` label — these are lightweight metadata updates that do not create or materially edit ticket content and therefore do not need to route through `linear-write-issue`.
|
|
136
136
|
- If sign-in credentials are in the item, extract and pass them to the flow. If the item touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
137
137
|
- If the item has a Validation Journey section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the description.
|
|
138
|
-
-
|
|
138
|
+
- The environment handoff for every work item uses the same durable grammar: human bare configured key or `Confirmed: <env>`; automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, managed draft markers and current ticket content decide provenance; provider edit history is not required. A marker proves automation; otherwise unknown provenance plus conflicting evidence stops for confirmation. Human-confirmed wins, then validated `Inferred:`; otherwise one exact `deploy.branches` key from the human-authored title, body, and reproduction steps or URL hostname drives the implementation base branch. Exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks so annotations cannot become evidence. Evidence supersedes only `Assumption:`. Normalize `prod` ↔ `production` only when exactly one is configured; no other aliases exist. Conflicts stop. Never infer from arbitrary branch text, URL paths/query strings, or substrings. With no signal, use the remote default and record the applicable assumption without blocking on a non-unique reverse-map. Require any selected mapping and remote branch. A reported bug environment is an example of the all-work-type rule. Non-integration fixes still require the linked forward cherry-pick.
|
|
@@ -48,13 +48,32 @@ empirical evidence only—native Playwright/Cypress/Maestro remains the regressi
|
|
|
48
48
|
|
|
49
49
|
## Env → base branch
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
The `## Target Backend Environment` grammar is durable: human-confirmed values
|
|
52
|
+
are a bare configured key or `Confirmed: <env>`; automation writes either
|
|
53
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>` or
|
|
54
|
+
`Assumption: <env> — remote default branch <branch>`. When no unique environment
|
|
55
|
+
maps to the default branch, use `Assumption: remote default branch <branch>`.
|
|
56
|
+
Human confirmation replaces an automated annotation with a bare key or
|
|
57
|
+
`Confirmed: <env>`. For legacy bare values, use managed draft markers and current
|
|
58
|
+
ticket content only; provider edit history is not required. A marker proves
|
|
59
|
+
automation and requires re-annotation; otherwise unknown provenance with
|
|
60
|
+
conflicting evidence stops for confirmation.
|
|
61
|
+
|
|
62
|
+
Resolution order is human-confirmed value; validated `Inferred:` evidence; then
|
|
63
|
+
one unambiguous signal from the human-authored title, body, and reproduction
|
|
64
|
+
steps or a URL hostname. Exclude the complete `Target Backend Environment`
|
|
65
|
+
section and other machine-authored metadata/draft blocks from the scan so an
|
|
66
|
+
annotation cannot validate or conflict with itself. Evidence supersedes only an
|
|
67
|
+
`Assumption:`. A signal must be an exact
|
|
68
|
+
`deploy.branches` key as a complete token/hostname label. The sole normalization
|
|
69
|
+
is `prod` ↔ `production` when exactly one is configured; no other aliases exist.
|
|
70
|
+
Conflicting signals stop. Never infer from arbitrary branch text, URL paths or
|
|
71
|
+
query strings, or substrings. With no signals, use the remote default branch and
|
|
72
|
+
record an assumption: include `<env>` only for a unique reverse-map, otherwise
|
|
73
|
+
use the branch-only form without inventing an environment or blocking. Require
|
|
74
|
+
any selected environment mapping and its remote branch to exist.
|
|
75
|
+
A non-integration environment bug is fixed, merged, and verified on that
|
|
76
|
+
environment branch first, then
|
|
77
|
+
forward cherry-picked down to the integration branch via a linked follow-up.
|
|
59
78
|
|
|
60
79
|
Full reference: [reference/config-resolution.md](../reference/config-resolution.md).
|
|
@@ -21,13 +21,27 @@ information was already on the ticket; only the structure was missing).
|
|
|
21
21
|
Gherkin Acceptance Criteria (one scenario per fix), expected-vs-actual +
|
|
22
22
|
environment, Repository, Relationship Search (actually run the git+tracker
|
|
23
23
|
search — don't fabricate "none found"), Validation Journey **draft** (via the
|
|
24
|
-
vendor `*-add-journey` skill), Target Backend Environment.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
vendor `*-add-journey` skill), Target Backend Environment. Preserve a bare
|
|
25
|
+
configured key or `Confirmed: <env>` as human-confirmed. Automation writes
|
|
26
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>` or
|
|
27
|
+
`Assumption: <env> — remote default branch <branch>`. Without a unique
|
|
28
|
+
reverse-map use `Assumption: remote default branch <branch>`; human confirmation
|
|
29
|
+
replaces the annotation with a bare key or `Confirmed: <env>`. For legacy bare
|
|
30
|
+
values, use managed draft markers and current ticket content only; provider
|
|
31
|
+
edit history is not required. A marker proves automation and requires
|
|
32
|
+
re-annotation; otherwise unknown provenance plus conflicting evidence stops.
|
|
33
|
+
Human-confirmed wins, then validated `Inferred:`
|
|
34
|
+
evidence. Otherwise use one unambiguous exact `deploy.branches` key from the
|
|
35
|
+
title, body, and reproduction steps or a URL hostname, excluding the complete
|
|
36
|
+
`Target Backend Environment` section and other machine-authored metadata/draft
|
|
37
|
+
blocks so annotations cannot become evidence. Evidence supersedes only
|
|
38
|
+
`Assumption:`. Normalize only built-in
|
|
39
|
+
`prod` ↔ `production` when exactly one is configured; no other aliases exist.
|
|
40
|
+
Never infer from arbitrary branch text, URL paths/query strings, or substrings.
|
|
41
|
+
Conflicting signals **stop** autofill. With no environment signal, use the
|
|
42
|
+
remote default and record the applicable `Assumption:` form; a non-unique
|
|
43
|
+
reverse-map alone never blocks. Require any selected mapping and remote branch.
|
|
44
|
+
Never overwrite human prose.
|
|
31
45
|
- **Tier B — irreducibly human:** real credentials/access that exist nowhere on
|
|
32
46
|
the item or in repo test-user docs; a genuine product/scoping decision with no
|
|
33
47
|
defensible default. Still propose a recommended default where one exists; ask
|
|
@@ -217,23 +217,47 @@ Declares **where this repo's LLM Wiki lives** so the query/ingest skills can res
|
|
|
217
217
|
|
|
218
218
|
### Env → base branch
|
|
219
219
|
|
|
220
|
-
Implementation flows resolve their PR base from the work item's
|
|
221
|
-
|
|
220
|
+
Implementation flows resolve their PR base from the work item's environment
|
|
221
|
+
evidence in the forward direction of `deploy.branches`.
|
|
222
222
|
For example, `{ "staging": "staging", "production": "main" }` means a staging
|
|
223
223
|
work item starts from `origin/staging` and opens its PR against `staging`. This
|
|
224
224
|
is the reverse/inverse of the env-keyed `done` inference that derives an
|
|
225
225
|
environment from a merged PR's base branch.
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
227
|
+
The field grammar records provenance durably: human-confirmed values are a bare
|
|
228
|
+
configured key or `Confirmed: <env>`; automated evidence is
|
|
229
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated
|
|
230
|
+
fallback is `Assumption: <env> — remote default branch <branch>`. Human
|
|
231
|
+
fallback without a unique reverse-map is
|
|
232
|
+
`Assumption: remote default branch <branch>`. Human
|
|
233
|
+
confirmation replaces an automated annotation with a bare key or
|
|
234
|
+
`Confirmed: <env>`.
|
|
235
|
+
|
|
236
|
+
For legacy bare values created before this grammar, use managed draft markers
|
|
237
|
+
and current ticket content only; provider edit history is neither required nor
|
|
238
|
+
assumed. A managed marker proves automation and requires rewriting to
|
|
239
|
+
`Inferred:` or `Assumption:`. Without one, provenance remains unknown, so the
|
|
240
|
+
bare value is usable only if no conflicting evidence exists; a conflict stops
|
|
241
|
+
for confirmation.
|
|
242
|
+
|
|
243
|
+
Resolve it in this order: human-confirmed wins; validated `Inferred:` evidence
|
|
244
|
+
is next; otherwise accept one unambiguous exact `deploy.branches` key from the
|
|
245
|
+
human-authored title, body, and reproduction steps or a URL hostname. Exclude
|
|
246
|
+
the entire `Target Backend Environment` section and all other machine-authored
|
|
247
|
+
metadata/draft blocks from the evidence scan, so annotations never validate or
|
|
248
|
+
conflict with themselves. Evidence supersedes only
|
|
249
|
+
an `Assumption:`. Treat the reported bug environment as an example of this
|
|
250
|
+
all-work-type evidence rule, not a special case. Normalize only built-in
|
|
251
|
+
`prod` ↔ `production` when exactly one is configured; no other aliases exist.
|
|
252
|
+
Never infer from arbitrary branch text, URL paths/query strings, or substrings.
|
|
253
|
+
Multiple conflicting signals stop. With no signals, use the remote default
|
|
254
|
+
branch and record an assumption: include the environment only for a unique
|
|
255
|
+
reverse-map; otherwise use the branch-only form without inventing an environment
|
|
256
|
+
or blocking solely on the reverse-map.
|
|
257
|
+
|
|
258
|
+
Every selected environment must have a unique `deploy.branches` mapping and its
|
|
259
|
+
mapped branch must exist on the remote. If either validation fails, stop and
|
|
260
|
+
report it. Do not silently default to the integration branch.
|
|
237
261
|
|
|
238
262
|
For non-integration environment bugs, definition of done is two-step:
|
|
239
263
|
|
|
@@ -504,10 +528,25 @@ If a project's terminal state is the same regardless of env, set `done` to a str
|
|
|
504
528
|
|
|
505
529
|
`deploy.branches` is also read in the **forward** direction by the build flow (`lisa-implement`): the environment a work item targets determines the branch the work is built on and the branch the PR opens against.
|
|
506
530
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
531
|
+
The durable field forms are: bare configured key or `Confirmed: <env>` for a
|
|
532
|
+
human-confirmed value; `Inferred: <env> — evidence: <title|body|reproduction|hostname>`
|
|
533
|
+
for automation-backed evidence; and
|
|
534
|
+
`Assumption: <env> — remote default branch <branch>` for a generic fallback.
|
|
535
|
+
When the remote default has no unique environment reverse-map, the valid form is
|
|
536
|
+
`Assumption: remote default branch <branch>`.
|
|
537
|
+
Human confirmation replaces the automated annotation with a bare key or
|
|
538
|
+
`Confirmed: <env>`.
|
|
539
|
+
|
|
540
|
+
For a legacy bare value, use managed draft markers and current ticket content
|
|
541
|
+
only; do not require provider edit history. A marker proves automation and
|
|
542
|
+
requires re-annotation; otherwise unknown provenance plus conflicting evidence
|
|
543
|
+
stops for confirmation.
|
|
544
|
+
|
|
545
|
+
1. **Resolve provenance first.** Human-confirmed wins, then validated `Inferred:` evidence. Otherwise search the human-authored title, body, and reproduction steps or URL hostname for one unambiguous exact `deploy.branches` key. Exclude the complete `Target Backend Environment` section and other machine-authored metadata/draft blocks from the scan so annotations cannot become evidence. Evidence supersedes only an `Assumption:`.
|
|
546
|
+
2. **Normalize narrowly.** Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases exist. Never infer from arbitrary branch text, URL paths/query strings, or substrings.
|
|
547
|
+
3. **Handle absence and conflict explicitly.** Multiple conflicting signals stop. With no signals, use the remote default branch (`gh repo view --json defaultBranchRef`, or `origin/HEAD`) and record the env-bearing assumption only for a unique reverse-map; otherwise use the branch-only assumption without inventing an environment or blocking.
|
|
548
|
+
4. **Validate the destination.** The selected exact configured key must map uniquely and the mapped remote branch must exist; otherwise stop without guessing or falling back.
|
|
549
|
+
5. **Before any code is written**, `lisa-implement` fetches and **rebases the working branch onto `origin/<base>`, resolving conflicts**, then opens the PR against that same base (`target_branch=<base>`).
|
|
511
550
|
|
|
512
551
|
This is the exact inverse of the env-keyed `done` "Branch inference" above: `done` derives the env *from* the PR base branch (reverse); the build flow derives the base branch *from* the env (forward). Both use the one `deploy.branches` map, so the branch a PR targets and the `done` status it earns always agree.
|
|
513
552
|
|
|
@@ -49,14 +49,29 @@ spec.
|
|
|
49
49
|
- **Validation Journey (draft)** — run the vendor `*-add-journey` skill to draft
|
|
50
50
|
the click-path, markers, and viewports from the reproduction steps. This is a
|
|
51
51
|
draft for human approval, not the final ratified contract.
|
|
52
|
-
- **Target Backend Environment** —
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
- **Target Backend Environment** — preserve a bare configured key or
|
|
53
|
+
`Confirmed: <env>` as human-confirmed. Automated evidence must write
|
|
54
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; a generic
|
|
55
|
+
fallback must write `Assumption: <env> — remote default branch <branch>`.
|
|
56
|
+
If the default branch has no unique environment reverse-map, instead write
|
|
57
|
+
`Assumption: remote default branch <branch>` without inventing an environment.
|
|
58
|
+
Human confirmation replaces an automated annotation with a bare key or
|
|
59
|
+
`Confirmed: <env>`. For legacy bare values, use managed draft markers and
|
|
60
|
+
current ticket content only; provider edit history is not required. A marker
|
|
61
|
+
proves automation and requires re-annotation; otherwise unknown provenance
|
|
62
|
+
plus conflicting evidence stops for confirmation. A human-confirmed value wins, followed by validated
|
|
63
|
+
`Inferred:` evidence. Otherwise inspect the title, body, and reproduction
|
|
64
|
+
steps or a URL hostname for one unambiguous exact `deploy.branches` key,
|
|
65
|
+
excluding the complete `Target Backend Environment` section and all other
|
|
66
|
+
machine-authored metadata/draft blocks so annotations cannot become evidence.
|
|
67
|
+
Clear evidence supersedes only an `Assumption:` value. The sole normalization
|
|
68
|
+
is `prod` ↔ `production` when exactly one key is configured; no other aliases
|
|
69
|
+
exist. Never infer from arbitrary branch text, URL paths or query strings, or
|
|
70
|
+
substrings. Multiple conflicting signals **stop** autofill. With no
|
|
71
|
+
environment signal, use the remote default and record the applicable
|
|
72
|
+
`Assumption:` form; a missing/ambiguous reverse-map alone never blocks.
|
|
73
|
+
Require any selected environment mapping and remote branch. Never overwrite
|
|
74
|
+
human prose.
|
|
60
75
|
|
|
61
76
|
**Tier B — irreducibly human (cannot invent — but still propose a default):**
|
|
62
77
|
|
|
@@ -154,7 +154,7 @@ When `issue_type ∉ {Bug, Epic}`, `parent_ref` must be set — **except for a b
|
|
|
154
154
|
|
|
155
155
|
#### S8 — Target Backend Environment
|
|
156
156
|
|
|
157
|
-
When `runtime_behavior_change = true`, body must contain `## Target Backend Environment
|
|
157
|
+
When `runtime_behavior_change = true`, the body must contain `## Target Backend Environment`. Read accepted environments from the exact configured keys of `.lisa.config.json` `deploy.branches`, never from a hardcoded list. Accept a human-confirmed bare exact configured key or `Confirmed: <env>`, automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, automated `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` when no unique reverse-map exists. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence fails for confirmation. Validate the annotation shape/source and remote-default branch; validate `<env>` as an exact configured key whenever present. A valid branch-only assumption must not fail solely because its reverse-map is absent or ambiguous. Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases are valid. Skipped for doc-only / config-only / type-only / Epic.
|
|
158
158
|
|
|
159
159
|
#### S9 — Sign-in Required
|
|
160
160
|
|
|
@@ -38,7 +38,7 @@ Resolve `<ORG>` and `<REPO>` from the ref or from `.lisa.config.json`.
|
|
|
38
38
|
| Priority | CREATE | Label `priority:<low|medium|high|critical>`. |
|
|
39
39
|
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin in `## Acceptance Criteria` — see Phase 3. |
|
|
40
40
|
| Validation Journey | Runtime-behavior changes | Delegate to `/github-add-journey`. |
|
|
41
|
-
| Target backend environment | Runtime-behavior changes |
|
|
41
|
+
| Target backend environment | Runtime-behavior changes | For every work type, use an exact `deploy.branches` key when an environment is known. Human: bare key or `Confirmed: <env>`. Automation: `Inferred: <env> — evidence: <title\|body\|reproduction\|hostname>`, `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` otherwise. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. |
|
|
42
42
|
| Sign-in account / credentials | Authenticated-surface tickets | Recorded under `## Sign-in Required`. |
|
|
43
43
|
| Repository | Bug, Task, Sub-task | GitHub Issues live in exactly one repo by definition — record the repo name under `## Repository`, and reject any AC bullet that references a different repo. |
|
|
44
44
|
| Source Requirement | PRD-sourced issues (`prd_source` provided) | `## Source Requirement` with PRD link + verbatim requirement quote(s) — see Phase 3; enforced at every level, sub-issues included. |
|
|
@@ -91,8 +91,14 @@ Scenario: <name>
|
|
|
91
91
|
[Explicit list of what this issue does NOT cover. Forces scope discipline.]
|
|
92
92
|
|
|
93
93
|
## Target Backend Environment
|
|
94
|
-
[Required when the issue changes runtime behavior.
|
|
95
|
-
|
|
94
|
+
[Required when the issue changes runtime behavior. Use an exact
|
|
95
|
+
`deploy.branches` key. A human-confirmed value is a bare key or
|
|
96
|
+
`Confirmed: <env>`. An automated evidence write is
|
|
97
|
+
`Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated
|
|
98
|
+
generic default is `Assumption: <env> — remote default branch <branch>`.
|
|
99
|
+
Without a unique reverse-map use `Assumption: remote default branch <branch>`.
|
|
100
|
+
Human confirmation replaces the automated annotation with a bare key or
|
|
101
|
+
`Confirmed: <env>`. Skip only for doc/config/type-only issues.]
|
|
96
102
|
|
|
97
103
|
## Sign-in Required
|
|
98
104
|
[Include this section ONLY if the work touches authenticated surfaces.
|
|
@@ -84,8 +84,12 @@ Using the general-purpose agent in Team Lead session, Determine the name of this
|
|
|
84
84
|
|
|
85
85
|
Using the general-purpose agent in Team Lead session, **determine the base branch from the ticket's target environment, then sync the working branch onto the latest of it before any work** — so implementation always builds on current target-environment code:
|
|
86
86
|
|
|
87
|
-
1. **Resolve the target environment
|
|
88
|
-
|
|
87
|
+
1. **Resolve the target environment with durable provenance.** The `## Target Backend Environment` value has this exact grammar: a human-confirmed value is either a bare configured key or `Confirmed: <env>`; automated evidence writes `Inferred: <env> — evidence: <title|body|reproduction|hostname>`; an automated fallback writes `Assumption: <env> — remote default branch <branch>` when the branch maps uniquely, or `Assumption: remote default branch <branch>` when it does not. Human confirmation replaces an automated annotation with the bare configured key or `Confirmed: <env>`. For a legacy bare value created before this grammar, use managed draft markers and current ticket content only — provider edit history is not required or assumed. A managed marker proves automation and requires rewriting to `Inferred:` or `Assumption:`; without a marker provenance is unknown, so the value may be used only when no conflicting evidence exists, and a conflict **stops for confirmation**.
|
|
88
|
+
- A human-confirmed value wins. Otherwise a validated `Inferred:` value is next.
|
|
89
|
+
- Otherwise inspect the human-authored title, body, and reproduction steps for exactly one unambiguous signal: an exact `deploy.branches` key as a complete token, or that key as a complete label in a URL hostname (`staging.<domain>`, `gql.staging.*`). Exclude the entire `Target Backend Environment` section and all other machine-authored metadata/draft blocks from this evidence scan so an `Inferred:` or `Assumption:` annotation can never validate or conflict with itself. Clear evidence may supersede only an `Assumption:` value, never a human-confirmed value.
|
|
90
|
+
- The only normalization is built-in `prod` ↔ `production`, and only when exactly one of those keys exists in `deploy.branches`; normalize to that configured key. No other aliases exist.
|
|
91
|
+
- Never infer from arbitrary branch text, URL paths or query strings, or substrings inside other words or hostname labels. Multiple conflicting signals after normalization **stop** the flow. If there are no signals, resolve the remote default branch (`gh repo view --json defaultBranchRef -q .defaultBranchRef.name`, or `git remote set-head origin -a` then `origin/HEAD`). When it reverse-maps uniquely, write the env-bearing `Assumption:` form; when the reverse-map is not unique, write the branch-only form and continue on the remote default without inventing an environment or blocking solely for that ambiguity. Record the fallback assumption in the plan/tracker artifact.
|
|
92
|
+
2. **Map the resolved environment to a base branch** through `.lisa.config.json` `deploy.branches` — the forward direction of the env-keyed `done` resolution. The selected exact configured key must map uniquely, and the mapped branch must exist on the remote. A missing/ambiguous mapping or remote branch **stops** the flow; never guess or silently fall back.
|
|
89
93
|
3. **Establish the feature branch off the latest base, conflict-free:**
|
|
90
94
|
- `git fetch origin`.
|
|
91
95
|
- Already on a feature branch with an **open PR** → reuse it. If the PR's base ≠ the resolved base branch, surface the mismatch and re-target only with confirmation — the ticket's environment is the source of truth.
|