@codyswann/lisa 2.132.4 → 2.132.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/expo/copy-overwrite/tsconfig.expo.json +6 -8
- package/expo/package-lisa/package.lisa.json +59 -53
- 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/skills/git-submit-pr/SKILL.md +14 -0
- package/plugins/lisa/skills/github-sync/SKILL.md +12 -0
- package/plugins/lisa/skills/implement/SKILL.md +3 -1
- package/plugins/lisa/skills/jira-sync/SKILL.md +12 -0
- package/plugins/lisa/skills/linear-sync/SKILL.md +12 -0
- package/plugins/lisa/skills/tracker-sync/SKILL.md +13 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/git-submit-pr/SKILL.md +14 -0
- package/plugins/lisa-agy/skills/github-sync/SKILL.md +12 -0
- package/plugins/lisa-agy/skills/implement/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/jira-sync/SKILL.md +12 -0
- package/plugins/lisa-agy/skills/linear-sync/SKILL.md +12 -0
- package/plugins/lisa-agy/skills/tracker-sync/SKILL.md +13 -1
- 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/skills/git-submit-pr/SKILL.md +14 -0
- package/plugins/lisa-copilot/skills/github-sync/SKILL.md +12 -0
- package/plugins/lisa-copilot/skills/implement/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +12 -0
- package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +12 -0
- package/plugins/lisa-copilot/skills/tracker-sync/SKILL.md +13 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/git-submit-pr/SKILL.md +14 -0
- package/plugins/lisa-cursor/skills/github-sync/SKILL.md +12 -0
- package/plugins/lisa-cursor/skills/implement/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +12 -0
- package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +12 -0
- package/plugins/lisa-cursor/skills/tracker-sync/SKILL.md +13 -1
- 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-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/skills/git-submit-pr/SKILL.md +14 -0
- package/plugins/src/base/skills/github-sync/SKILL.md +12 -0
- package/plugins/src/base/skills/implement/SKILL.md +3 -1
- package/plugins/src/base/skills/jira-sync/SKILL.md +12 -0
- package/plugins/src/base/skills/linear-sync/SKILL.md +12 -0
- package/plugins/src/base/skills/tracker-sync/SKILL.md +13 -1
- package/typescript/copy-overwrite/eslint.ignore.config.json +1 -0
|
@@ -13,6 +13,7 @@ Recognized optional hints:
|
|
|
13
13
|
- `work_item_ref=<ref>` — source tracker item for native development linkage. Examples: `CodySwannGT/lisa#614`, `https://github.com/CodySwannGT/lisa/issues/614`, `ENG-123`, `PROJ-456`.
|
|
14
14
|
- `target_branch=<branch>` or `base=<branch>` — intended PR base branch, used to decide whether a GitHub closing keyword is safe.
|
|
15
15
|
- `tracker_provider=<github|linear|jira|none>` — explicit provider when the ref shape is ambiguous.
|
|
16
|
+
- `pr_url=<url>` — live pull request URL, only needed when updating tracker backlinks from an existing PR context.
|
|
16
17
|
|
|
17
18
|
## Workflow
|
|
18
19
|
|
|
@@ -31,6 +32,7 @@ Recognized optional hints:
|
|
|
31
32
|
- If exists: Update description with latest changes
|
|
32
33
|
- If not: Create PR with comprehensive description (not a draft)
|
|
33
34
|
- Include native development linkage for the source work item when `work_item_ref` can be inferred from `$ARGUMENTS`, the current branch name, an existing PR body, or the issue/ticket context passed by the caller.
|
|
35
|
+
- After the PR exists, ensure the source work item has a backlink to the PR: invoke `lisa:tracker-sync` with the work item, milestone `pr-ready`, the live `pr_url`, and `tracker_provider` when known. This makes ticket -> PR linkage mandatory, not just a best-effort milestone comment.
|
|
34
36
|
- After the PR exists, re-resolve the live Pull Request node id and, when `github.projects.v2` is enabled, invoke `lisa:github-project-v2` with `operation: ensure-item` and `content_node_id: <pull-request-node-id>` so linked pull requests join the configured shared Project without replacing the PR as the durable review/merge surface.
|
|
35
37
|
5. **Auto-merge**: Choose merge strategy by PR type:
|
|
36
38
|
- **Promotion PRs** (env → env, e.g. `dev` → `staging`): use `gh pr merge --auto --merge` (never squash). Squashing flattens the constituent `chore(release): X.Y.Z [skip ci]` commits into one commit titled with the PR title, stripping the `[skip ci]` markers and breaking the release workflow's promotion-detection regex — the destination branch then double-bumps its version. `--merge` keeps each `chore(release)` commit (and its `[skip ci]` marker) intact under a clean merge commit subject the workflow can recognize.
|
|
@@ -62,6 +64,18 @@ Add provider-appropriate linkage to the PR title and/or body without changing th
|
|
|
62
64
|
|
|
63
65
|
When updating an existing PR, preserve any existing linkage line unless the new `work_item_ref` is more specific. Do not duplicate equivalent references.
|
|
64
66
|
|
|
67
|
+
### Work Item Backlink
|
|
68
|
+
|
|
69
|
+
After creating or updating the PR, always make the reverse link durable on the source work item when `work_item_ref` is available:
|
|
70
|
+
|
|
71
|
+
1. Resolve the live PR URL with `gh pr view <pr-number> --json url --jq .url`.
|
|
72
|
+
2. Invoke `lisa:tracker-sync` with the original work item ref, milestone `pr-ready`, `pr_url=<url>`, and `tracker_provider=<provider>` when known.
|
|
73
|
+
3. The vendor sync skill must prefer the provider's native development-link primitive where one is available and verifiable.
|
|
74
|
+
4. If native linkage is unavailable, unconfigured, or cannot be verified, the vendor sync skill must create or update a single managed `[lisa-pr-link]` comment on the work item containing the PR URL. The fallback comment is not optional; it is the ticket-side half of the two-way link.
|
|
75
|
+
5. When the PR later merges, invoke `lisa:tracker-sync` again with milestone `pr-merged`, the same `pr_url`, and the merge SHA when available, so the managed backlink reflects the final state.
|
|
76
|
+
|
|
77
|
+
Do not report PR submission as fully synced while the PR body references the ticket but the ticket has neither a verified native PR link nor the managed backlink comment.
|
|
78
|
+
|
|
65
79
|
### GitHub ProjectV2 Coordination
|
|
66
80
|
|
|
67
81
|
After PR creation or update, resolve the live Pull Request node id:
|
|
@@ -10,6 +10,8 @@ Sync current plan progress to a GitHub Issue: `$ARGUMENTS`
|
|
|
10
10
|
|
|
11
11
|
If no argument is provided, search for an issue ref (`org/repo#<number>` or `https://github.com/<org>/<repo>/issues/<n>` URL) in the active plan file (most recently modified `.md` in `plans/`).
|
|
12
12
|
|
|
13
|
+
Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
|
|
14
|
+
|
|
13
15
|
## Workflow
|
|
14
16
|
|
|
15
17
|
### Step 1: Identify Issue and Context
|
|
@@ -50,6 +52,16 @@ If no argument is provided, search for an issue ref (`org/repo#<number>` or `htt
|
|
|
50
52
|
|
|
51
53
|
3. **Report** to the user what was synced.
|
|
52
54
|
|
|
55
|
+
### Step 3b: Ensure PR Backlink
|
|
56
|
+
|
|
57
|
+
When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the GitHub Issue has a durable ticket -> PR link:
|
|
58
|
+
|
|
59
|
+
1. Prefer GitHub's native development link by making sure the PR body contains `Refs #<n>` / `Closes #<n>` (or the fully qualified cross-repo form) and verify with `gh issue view <number> --json timelineItems` or an equivalent GitHub read that exposes the linked PR.
|
|
60
|
+
2. If native linkage cannot be verified, post or update a single managed issue comment starting with `[lisa-pr-link]`. Include the PR URL, milestone (`pr-ready` or `pr-merged`), and merge SHA when available.
|
|
61
|
+
3. Keep the fallback idempotent: search existing comments for `[lisa-pr-link]` and the PR URL; update/replace that managed comment where the provider allows updates, otherwise skip when the current body already matches. Do not append duplicate backlink comments on reruns.
|
|
62
|
+
|
|
63
|
+
This fallback is required even though GitHub usually links PRs natively from PR body keywords; the issue must show the PR from at least one ticket-side surface.
|
|
64
|
+
|
|
53
65
|
### Step 4: Suggest Status Transition
|
|
54
66
|
|
|
55
67
|
Based on the milestone, suggest (but do NOT automatically perform) a label transition:
|
|
@@ -71,6 +71,7 @@ When the request came from a tracker work item, preserve its native identifier f
|
|
|
71
71
|
- Capture `tracker_provider` and `work_item_ref` from the resolved input before creating or reusing a branch. Examples: `github` + `CodySwannGT/lisa#614`, `linear` + `ENG-123`, `jira` + `ENG-123`.
|
|
72
72
|
- 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`.
|
|
73
73
|
- 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.
|
|
74
|
+
- 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.
|
|
74
75
|
- If the provider has no native branch or PR development-linkage surface, continue without linkage and mention that the provider was skipped.
|
|
75
76
|
|
|
76
77
|
Using the general-purpose agent in Team Lead session, Determine which flow applies:
|
|
@@ -159,8 +160,9 @@ Before shutting down the team, execute the Verify flow:
|
|
|
159
160
|
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).
|
|
160
161
|
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
|
|
161
162
|
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 when one exists so the PR can be linked natively to the source issue.
|
|
163
|
+
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`.
|
|
162
164
|
8. PR Watch Loop: Monitor the PR using `git-submit-pr`'s drive-to-merge behavior. Create a task for the agent team to resolve any code review comments by either implementing the suggestions or commenting why they should not be implemented and close the comment. Fix any failing checks and repush. If the PR is `BEHIND`, blocked by stale review state, or cannot enable auto-merge, follow the harness-agnostic `git-submit-pr` re-sync, review-gate, and direct-merge fallback loop until the PR is actually merged or a blocking failure is surfaced.
|
|
163
|
-
9. Merge the PR
|
|
165
|
+
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>` when a work item exists.
|
|
164
166
|
10. Monitor the deploy action that triggers automatically from the successful merge
|
|
165
167
|
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
|
|
166
168
|
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.
|
|
@@ -12,6 +12,8 @@ Sync current plan progress to JIRA ticket: $ARGUMENTS
|
|
|
12
12
|
|
|
13
13
|
If no argument provided, search for a ticket URL in the active plan file (most recently modified `.md` in `plans/`).
|
|
14
14
|
|
|
15
|
+
Optional arguments include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
|
|
16
|
+
|
|
15
17
|
## Workflow
|
|
16
18
|
|
|
17
19
|
### Step 1: Identify Ticket and Context
|
|
@@ -48,6 +50,16 @@ Before adding a comment, check for an existing milestone comment to avoid duplic
|
|
|
48
50
|
- Add PR link to a custom field or comment
|
|
49
51
|
5. **Report** what was synced to the user
|
|
50
52
|
|
|
53
|
+
### Step 3b: Ensure PR Backlink
|
|
54
|
+
|
|
55
|
+
When `$ARGUMENTS` includes `pr_url=<url>` for `PR ready` or `PR merged`, ensure the JIRA ticket has a durable ticket -> PR link:
|
|
56
|
+
|
|
57
|
+
1. Prefer the JIRA development-link surface when the site's GitHub/JIRA integration or remote-link API is available through `lisa:atlassian-access`; verify by re-reading the ticket's remote links / development metadata.
|
|
58
|
+
2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed JIRA comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
|
|
59
|
+
3. Keep the fallback idempotent: read existing comments, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If the current access layer cannot update comments in place, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
|
|
60
|
+
|
|
61
|
+
The PR body/branch issue key is the PR -> ticket side. This step is the required ticket -> PR side.
|
|
62
|
+
|
|
51
63
|
### Step 4: Suggest Status Transition
|
|
52
64
|
|
|
53
65
|
Based on the milestone, suggest (but don't automatically perform) a status transition:
|
|
@@ -31,6 +31,7 @@ This skill **suggests** transitions but does not auto-transition the native Line
|
|
|
31
31
|
|
|
32
32
|
- `<IDENTIFIER>` is the Linear Issue identifier (e.g. `ENG-123`). If not provided, the skill searches the active plan file for a linked Linear Issue.
|
|
33
33
|
- `<milestone>` is one of `plan-created`, `implementation-in-progress`, `pr-ready`, `pr-merged`.
|
|
34
|
+
- Optional tokens include `pr_url=<url>` for the live pull request and `merge_sha=<sha>` once merged.
|
|
34
35
|
|
|
35
36
|
## Phase 1 — Resolve Issue
|
|
36
37
|
|
|
@@ -66,6 +67,16 @@ Next: implementation begins. Suggested status: **Todo** (label: `status:ready`).
|
|
|
66
67
|
|
|
67
68
|
Call `mcp__linear-server__save_comment({issueId: <id>, body: <comment>})`.
|
|
68
69
|
|
|
70
|
+
## Phase 3b — Ensure PR Backlink
|
|
71
|
+
|
|
72
|
+
When `$ARGUMENTS` includes `pr_url=<url>` for `pr-ready` or `pr-merged`, ensure the Linear Issue has a durable ticket -> PR link:
|
|
73
|
+
|
|
74
|
+
1. Prefer Linear's native GitHub attachment / pull request link when the integration has attached the PR through the branch name, PR title, or PR body issue identifier. Verify by re-reading the Issue and its attachments / relations where the Linear access layer exposes them.
|
|
75
|
+
2. If native linkage is unavailable, unconfigured, cross-system, or cannot be verified, create or update a single managed Linear comment containing the PR URL. The comment must start with `[lisa-pr-link]` and include the milestone (`pr-ready` or `pr-merged`) and merge SHA when available.
|
|
76
|
+
3. Keep the fallback idempotent: read existing comments where the access layer exposes them, find the `[lisa-pr-link]` comment for the same PR URL, and update/skip it instead of appending duplicates. If comment update is unavailable, skip when an identical managed comment already exists and otherwise add exactly one replacement comment with the stable marker.
|
|
77
|
+
|
|
78
|
+
The PR branch/title/body identifier is the PR -> Linear side. This phase is the required Linear -> PR side.
|
|
79
|
+
|
|
69
80
|
## Phase 4 — Update Status Label (when caller requests)
|
|
70
81
|
|
|
71
82
|
If the caller passes `--update-label`, update the `status:*` label set via `mcp__linear-server__save_issue`:
|
|
@@ -113,3 +124,4 @@ When the caller passes `--rollup`, this skill **derives a parent/container's `st
|
|
|
113
124
|
- Never post empty or minimal comments — if a milestone has no meaningful content, skip the post.
|
|
114
125
|
- Do not delete prior milestone comments. They are the audit trail.
|
|
115
126
|
- If `save_comment` fails, retry once. If it fails again, surface the error.
|
|
127
|
+
- Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
|
|
@@ -20,7 +20,7 @@ See the `config-resolution` rule for configuration and dispatch table.
|
|
|
20
20
|
- Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
|
|
21
21
|
3. Pass through the output.
|
|
22
22
|
|
|
23
|
-
`$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below)
|
|
23
|
+
`$ARGUMENTS` is forwarded verbatim, including the optional `--rollup` flag (see "Parent status rollup" below), `--update-label`, `pr_url=<url>`, and `merge_sha=<sha>`. The shim never interprets these — the vendor skill does.
|
|
24
24
|
|
|
25
25
|
If `$ARGUMENTS` is empty, all vendor skills auto-detect a ticket reference from the active plan file (most recently modified `.md` in `plans/`).
|
|
26
26
|
|
|
@@ -45,8 +45,20 @@ The state machine (first match wins, evaluated over the **required** leaves only
|
|
|
45
45
|
|
|
46
46
|
**Safe-by-default when not yet supported.** A vendor sync path that has not implemented native rollup MUST be a documented no-op that surfaces the derived state as a suggestion/comment rather than guessing a transition — never an unsafe default. Without `--rollup`, the sync skills behave exactly as before (milestone comment on the work item; no parent derivation).
|
|
47
47
|
|
|
48
|
+
## Pull request backlinking
|
|
49
|
+
|
|
50
|
+
When `$ARGUMENTS` includes `pr_url=<url>` with milestone `pr-ready` or `pr-merged`, the dispatch target must ensure ticket -> PR linkage, not just post a generic progress note:
|
|
51
|
+
|
|
52
|
+
1. Prefer the provider's native development-link primitive when Lisa can write and verify it for that provider.
|
|
53
|
+
2. Verify the native link using the provider read surface when available.
|
|
54
|
+
3. If the native link is unavailable, unconfigured, cross-system, or cannot be verified, create or update one managed backlink comment on the work item containing the PR URL and current milestone.
|
|
55
|
+
4. Keep the comment idempotent by using a stable marker such as `[lisa-pr-link]`; reruns update or skip the existing managed comment rather than appending duplicates.
|
|
56
|
+
|
|
57
|
+
This is the reverse half of `lisa:git-submit-pr`'s PR body linkage. A PR that mentions a ticket is not considered fully synced until the ticket also has either a verified native PR link or the managed fallback comment.
|
|
58
|
+
|
|
48
59
|
## Rules
|
|
49
60
|
|
|
50
61
|
- Idempotent updates — running sync at the same milestone twice should not produce duplicate comments. Vendor skills enforce this.
|
|
51
62
|
- Never auto-transition the underlying state. Linear's label-based transition (`status:*`) is the canonical signal and is updated only when the caller passes `--update-label`. Native states stay as suggestions.
|
|
52
63
|
- Parent rollup derives state from children per the `leaf-only-lifecycle` rule; it never sets a parent to `ready` and never resolves a dev/staging `done` in this single-environment repo.
|
|
64
|
+
- Pull request backlinks are mandatory when `pr_url=<url>` is present: native first, managed-comment fallback, never silently dropped.
|