Add skill to create jira issue from provided input#293
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (12)
👮 Files not reviewed due to content moderation or server errors (12)
📝 Walkthrough🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/skills/create-jira-issue-from-user-input/scripts/env_utils.py:
- Around line 29-41: The environment file reader in env_utils.py uses
candidate.open() with the platform default encoding, which can break on
non-ASCII content. Update the file-reading logic in the candidate.open() block
to use an explicit UTF-8 encoding so parsing behaves consistently across OSes;
keep the existing parsing flow in the same candidate loop and preserve the
os.environ assignment behavior.
- Around line 12-17: The `_default_env_candidates` helper currently walks every
parent of `env_utils.py`, which can accidentally load an unrelated `.env`
outside the repo. Update this search to stop at the repository root by detecting
the first ancestor containing `.git` (or equivalent repo marker) and only
include `.env` files from `Path.cwd()` plus ancestors up to that boundary. Keep
the change localized to `_default_env_candidates` in `env_utils.py`, preserving
the existing candidate ordering.
In
@.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py:
- Around line 62-63: The Jira upload request currently calls urlopen(req)
without any timeout, so the network call can block indefinitely. Update the
request handling in upload_attachment.py around the urlopen(req) call to pass a
reasonable timeout value and make sure the existing JSON parsing path still runs
after the response is received.
- Around line 89-93: The pre-upload validation in upload_attachment.py is only
checking Path.exists(), which lets directories through and causes upload() to
crash when read_bytes() is called. Update the file validation logic in the
args.file handling block to use Path.is_file() for the missing/invalid list, so
only real files proceed into upload(). Keep the existing sys.exit error path for
non-files so the upload loop and its HTTPError/URLError handling remain able to
continue processing remaining items.
- Around line 79-87: The validation in upload_attachment.py only checks that
JIRA_BASE_URL is present; update the startup checks in the main
credential-loading flow to also reject non-HTTPS URLs. In the same block that
reads JIRA_API_EMAIL, JIRA_API_KEY, and JIRA_BASE_URL, parse/inspect the base
URL and exit with an error unless its scheme is https, keeping the existing
credential and URL missing checks intact.
- Around line 41-48: The multipart boundary in upload_attachment.py is
hard-coded to a fixed example string, which can collide with file contents and
corrupt the request body. Update the attachment upload flow to generate a unique
random boundary per request inside the upload helper, then use that boundary
consistently when building the multipart body and headers in the same code path.
Reference the existing file upload assembly around the file_bytes/body
construction so the boundary is produced once and reused throughout the request.
In @.github/skills/create-jira-issue-from-user-input/SKILL.md:
- Around line 60-62: The helper script invocations in
create-jira-issue-from-user-input still hard-code the old .cursor/skills path,
so they will fail when the skill lives under .github/skills. Update the affected
commands in SKILL.md to resolve paths from the skill root (for example, derive
the helper script location relative to SKILL.md) and apply the same fix
consistently in Step 0, Step 5, and Step 6 so all references to check_env.py and
the other helpers work regardless of install location.
- Around line 191-194: The screenshot naming flow in the SKILL.md evidence
capture step is inconsistent: the filename rule adds “.png” twice and the slug
source depends on the final issue summary before it exists. Update the evidence
step around the browser_take_screenshot / SCREENSHOTS guidance to use a filename
format that does not append a second extension, and make the slug come from a
draft/scenario identifier or move the naming rule to the step where the final
summary is available. Keep the rest of the capture requirements (fullPage,
append to SCREENSHOTS, network, console) unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 78c9eee9-d4e2-41a0-9f00-56953e1b2b36
📒 Files selected for processing (12)
.github/skills/create-jira-issue-from-user-input/README.md.github/skills/create-jira-issue-from-user-input/SKILL.md.github/skills/create-jira-issue-from-user-input/references/application-context.md.github/skills/create-jira-issue-from-user-input/references/bug-template.md.github/skills/create-jira-issue-from-user-input/references/jira-ticket-settings.md.github/skills/create-jira-issue-from-user-input/references/task-template.md.github/skills/create-jira-issue-from-user-input/references/test-data-rules.md.github/skills/create-jira-issue-from-user-input/scripts/check_env.py.github/skills/create-jira-issue-from-user-input/scripts/env_utils.py.github/skills/create-jira-issue-from-user-input/scripts/generate_salt.py.github/skills/create-jira-issue-from-user-input/scripts/prepare_evidence_dir.py.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py
| def _default_env_candidates() -> list: | ||
| """Candidate .env locations: the CWD, then every ancestor of this file.""" | ||
| candidates = [Path.cwd() / ".env"] | ||
| for parent in Path(__file__).resolve().parents: | ||
| candidates.append(parent / ".env") | ||
| return candidates |
There was a problem hiding this comment.
🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win
Unbounded ancestor walk for .env discovery.
_default_env_candidates walks every ancestor of env_utils.py up to the filesystem root. Depending on checkout depth, this can pick up an unrelated .env in a parent directory (e.g., a user's home directory) and silently load unintended values — risky for a script that ultimately injects Jira credentials (JIRA_API_EMAIL, JIRA_API_KEY).
Consider bounding the search to the repository root (e.g., stop once a .git directory is found) rather than walking indefinitely.
♻️ Bound the search to the repo root
def _default_env_candidates() -> list:
- """Candidate .env locations: the CWD, then every ancestor of this file."""
+ """Candidate .env locations: the CWD, then ancestors of this file up to the repo root."""
candidates = [Path.cwd() / ".env"]
for parent in Path(__file__).resolve().parents:
candidates.append(parent / ".env")
+ if (parent / ".git").exists():
+ break
return candidates📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| def _default_env_candidates() -> list: | |
| """Candidate .env locations: the CWD, then every ancestor of this file.""" | |
| candidates = [Path.cwd() / ".env"] | |
| for parent in Path(__file__).resolve().parents: | |
| candidates.append(parent / ".env") | |
| return candidates | |
| def _default_env_candidates() -> list: | |
| """Candidate .env locations: the CWD, then ancestors of this file up to the repo root.""" | |
| candidates = [Path.cwd() / ".env"] | |
| for parent in Path(__file__).resolve().parents: | |
| candidates.append(parent / ".env") | |
| if (parent / ".git").exists(): | |
| break | |
| return candidates |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/skills/create-jira-issue-from-user-input/scripts/env_utils.py around
lines 12 - 17, The `_default_env_candidates` helper currently walks every parent
of `env_utils.py`, which can accidentally load an unrelated `.env` outside the
repo. Update this search to stop at the repository root by detecting the first
ancestor containing `.git` (or equivalent repo marker) and only include `.env`
files from `Path.cwd()` plus ancestors up to that boundary. Keep the change
localized to `_default_env_candidates` in `env_utils.py`, preserving the
existing candidate ordering.
| for candidate in candidates: | ||
| if candidate.is_file(): | ||
| with candidate.open() as fh: | ||
| for line in fh: | ||
| line = line.strip() | ||
| if not line or line.startswith("#") or "=" not in line: | ||
| continue | ||
| key, _, value = line.partition("=") | ||
| key = key.strip() | ||
| value = value.strip().strip('"').strip("'") | ||
| if key and key not in os.environ: | ||
| os.environ[key] = value | ||
| break |
There was a problem hiding this comment.
🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win
Specify an explicit file encoding.
candidate.open() relies on the platform default encoding, which can differ across OSes and cause UnicodeDecodeError for non-ASCII values, especially on Windows (which the sibling prepare_evidence_dir.py explicitly targets).
♻️ Use UTF-8 explicitly
- with candidate.open() as fh:
+ with candidate.open(encoding="utf-8") as fh:📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| for candidate in candidates: | |
| if candidate.is_file(): | |
| with candidate.open() as fh: | |
| for line in fh: | |
| line = line.strip() | |
| if not line or line.startswith("#") or "=" not in line: | |
| continue | |
| key, _, value = line.partition("=") | |
| key = key.strip() | |
| value = value.strip().strip('"').strip("'") | |
| if key and key not in os.environ: | |
| os.environ[key] = value | |
| break | |
| for candidate in candidates: | |
| if candidate.is_file(): | |
| with candidate.open(encoding="utf-8") as fh: | |
| for line in fh: | |
| line = line.strip() | |
| if not line or line.startswith("#") or "=" not in line: | |
| continue | |
| key, _, value = line.partition("=") | |
| key = key.strip() | |
| value = value.strip().strip('"').strip("'") | |
| if key and key not in os.environ: | |
| os.environ[key] = value | |
| break |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/skills/create-jira-issue-from-user-input/scripts/env_utils.py around
lines 29 - 41, The environment file reader in env_utils.py uses candidate.open()
with the platform default encoding, which can break on non-ASCII content. Update
the file-reading logic in the candidate.open() block to use an explicit UTF-8
encoding so parsing behaves consistently across OSes; keep the existing parsing
flow in the same candidate loop and preserve the os.environ assignment behavior.
| boundary = "----PythonMultipartBoundary7MA4YWxkTrZu0" | ||
| file_bytes = file_path.read_bytes() | ||
|
|
||
| body = ( | ||
| f"--{boundary}\r\n" | ||
| f'Content-Disposition: form-data; name="file"; filename="{file_path.name}"\r\n' | ||
| f"Content-Type: {mime_type}\r\n\r\n" | ||
| ).encode() + file_bytes + f"\r\n--{boundary}--\r\n".encode() |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win
Randomize the multipart boundary.
The boundary is a static, well-known example string. If uploaded binary content ever contains that exact byte sequence, the multipart body would be corrupted server-side. Generating a random boundary per request removes the risk entirely at near-zero cost.
♻️ Proposed fix
+import uuid
+
def upload(issue_key: str, file_path: Path, email: str, api_token: str, base_url: str) -> dict:
url = f"{base_url.rstrip('/')}/rest/api/3/issue/{issue_key}/attachments"
mime_type, _ = mimetypes.guess_type(str(file_path))
mime_type = mime_type or "application/octet-stream"
- boundary = "----PythonMultipartBoundary7MA4YWxkTrZu0"
+ boundary = f"----PythonMultipartBoundary{uuid.uuid4().hex}"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| boundary = "----PythonMultipartBoundary7MA4YWxkTrZu0" | |
| file_bytes = file_path.read_bytes() | |
| body = ( | |
| f"--{boundary}\r\n" | |
| f'Content-Disposition: form-data; name="file"; filename="{file_path.name}"\r\n' | |
| f"Content-Type: {mime_type}\r\n\r\n" | |
| ).encode() + file_bytes + f"\r\n--{boundary}--\r\n".encode() | |
| import uuid | |
| boundary = f"----PythonMultipartBoundary{uuid.uuid4().hex}" | |
| file_bytes = file_path.read_bytes() | |
| body = ( | |
| f"--{boundary}\r\n" | |
| f'Content-Disposition: form-data; name="file"; filename="{file_path.name}"\r\n' | |
| f"Content-Type: {mime_type}\r\n\r\n" | |
| ).encode() + file_bytes + f"\r\n--{boundary}--\r\n".encode() |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
@.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py
around lines 41 - 48, The multipart boundary in upload_attachment.py is
hard-coded to a fixed example string, which can collide with file contents and
corrupt the request body. Update the attachment upload flow to generate a unique
random boundary per request inside the upload helper, then use that boundary
consistently when building the multipart body and headers in the same code path.
Reference the existing file upload assembly around the file_bytes/body
construction so the boundary is produced once and reused throughout the request.
| with urlopen(req) as resp: | ||
| return json.loads(resp.read().decode()) |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Add a timeout to the Jira request.
urlopen(req) has no timeout=, so an unreachable or slow Jira endpoint will hang the script indefinitely. This is an external network call with no bound, matching a classic blocking-call-without-timeout hazard.
🐛 Proposed fix
- with urlopen(req) as resp:
+ with urlopen(req, timeout=30) as resp:
return json.loads(resp.read().decode())📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| with urlopen(req) as resp: | |
| return json.loads(resp.read().decode()) | |
| with urlopen(req, timeout=30) as resp: | |
| return json.loads(resp.read().decode()) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
@.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py
around lines 62 - 63, The Jira upload request currently calls urlopen(req)
without any timeout, so the network call can block indefinitely. Update the
request handling in upload_attachment.py around the urlopen(req) call to pass a
reasonable timeout value and make sure the existing JSON parsing path still runs
after the response is received.
| email = os.environ.get("JIRA_API_EMAIL", "") | ||
| token = os.environ.get("JIRA_API_KEY", "") | ||
| base_url = os.environ.get("JIRA_BASE_URL", "") | ||
|
|
||
| if not email or not token: | ||
| sys.exit("ERROR: Jira credentials missing. Set JIRA_API_EMAIL and JIRA_API_KEY in the environment or .env file.") | ||
|
|
||
| if not base_url: | ||
| sys.exit("ERROR: Jira base URL missing. Set JIRA_BASE_URL in the environment or .env file.") |
There was a problem hiding this comment.
🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win
Consider enforcing HTTPS for JIRA_BASE_URL.
Basic Auth credentials (JIRA_API_EMAIL/JIRA_API_KEY) are sent over whatever scheme JIRA_BASE_URL specifies. If it were misconfigured to http://, credentials would go over cleartext. A quick scheme check would prevent that misconfiguration from silently leaking credentials.
🛡️ Proposed fix
if not base_url:
sys.exit("ERROR: Jira base URL missing. Set JIRA_BASE_URL in the environment or .env file.")
+
+ if not base_url.startswith("https://"):
+ sys.exit("ERROR: JIRA_BASE_URL must use https:// to avoid sending credentials in cleartext.")📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| email = os.environ.get("JIRA_API_EMAIL", "") | |
| token = os.environ.get("JIRA_API_KEY", "") | |
| base_url = os.environ.get("JIRA_BASE_URL", "") | |
| if not email or not token: | |
| sys.exit("ERROR: Jira credentials missing. Set JIRA_API_EMAIL and JIRA_API_KEY in the environment or .env file.") | |
| if not base_url: | |
| sys.exit("ERROR: Jira base URL missing. Set JIRA_BASE_URL in the environment or .env file.") | |
| email = os.environ.get("JIRA_API_EMAIL", "") | |
| token = os.environ.get("JIRA_API_KEY", "") | |
| base_url = os.environ.get("JIRA_BASE_URL", "") | |
| if not email or not token: | |
| sys.exit("ERROR: Jira credentials missing. Set JIRA_API_EMAIL and JIRA_API_KEY in the environment or .env file.") | |
| if not base_url: | |
| sys.exit("ERROR: Jira base URL missing. Set JIRA_BASE_URL in the environment or .env file.") | |
| if not base_url.startswith("https://"): | |
| sys.exit("ERROR: JIRA_BASE_URL must use https:// to avoid sending credentials in cleartext.") |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
@.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py
around lines 79 - 87, The validation in upload_attachment.py only checks that
JIRA_BASE_URL is present; update the startup checks in the main
credential-loading flow to also reject non-HTTPS URLs. In the same block that
reads JIRA_API_EMAIL, JIRA_API_KEY, and JIRA_BASE_URL, parse/inspect the base
URL and exit with an error unless its scheme is https, keeping the existing
credential and URL missing checks intact.
| file_paths = [Path(f) for f in args.file] | ||
| missing = [str(p) for p in file_paths if not p.exists()] | ||
| if missing: | ||
| sys.exit(f"ERROR: File(s) not found: {', '.join(missing)}") | ||
|
|
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Use is_file() instead of exists() for the pre-upload check.
If --file points to a directory, exists() passes, then upload()'s file_path.read_bytes() (Line 42) raises IsADirectoryError. That's not caught by the HTTPError/URLError handlers in the upload loop (Lines 100-106), so it propagates unhandled and crashes the script instead of cleanly reporting the failure and continuing with remaining files.
🐛 Proposed fix
file_paths = [Path(f) for f in args.file]
- missing = [str(p) for p in file_paths if not p.exists()]
+ missing = [str(p) for p in file_paths if not p.is_file()]
if missing:
- sys.exit(f"ERROR: File(s) not found: {', '.join(missing)}")
+ sys.exit(f"ERROR: File(s) not found or not a regular file: {', '.join(missing)}")📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| file_paths = [Path(f) for f in args.file] | |
| missing = [str(p) for p in file_paths if not p.exists()] | |
| if missing: | |
| sys.exit(f"ERROR: File(s) not found: {', '.join(missing)}") | |
| file_paths = [Path(f) for f in args.file] | |
| missing = [str(p) for p in file_paths if not p.is_file()] | |
| if missing: | |
| sys.exit(f"ERROR: File(s) not found or not a regular file: {', '.join(missing)}") |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
@.github/skills/create-jira-issue-from-user-input/scripts/upload_attachment.py
around lines 89 - 93, The pre-upload validation in upload_attachment.py is only
checking Path.exists(), which lets directories through and causes upload() to
crash when read_bytes() is called. Update the file validation logic in the
args.file handling block to use Path.is_file() for the missing/invalid list, so
only real files proceed into upload(). Keep the existing sys.exit error path for
non-files so the upload loop and its HTTPError/URLError handling remain able to
continue processing remaining items.
| python3 .cursor/skills/create-jira-issue-from-user-input/scripts/check_env.py \ | ||
| --vars JIRA_API_EMAIL JIRA_API_KEY JIRA_CLOUD_ID JIRA_PROJECT JIRA_BASE_URL | ||
| ``` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Resolve the helper path relative to the skill root.
These commands hard-code .cursor/skills/..., but this PR places the skill under .github/skills/.... If the repo doesn't also mirror the package into .cursor, Step 0, Step 5, and Step 6 won't find the helper scripts. Use a path derived from SKILL.md instead of baking in the install location.
Also applies to: 87-88, 227-229, 288-290
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/skills/create-jira-issue-from-user-input/SKILL.md around lines 60 -
62, The helper script invocations in create-jira-issue-from-user-input still
hard-code the old .cursor/skills path, so they will fail when the skill lives
under .github/skills. Update the affected commands in SKILL.md to resolve paths
from the skill root (for example, derive the helper script location relative to
SKILL.md) and apply the same fix consistently in Step 0, Step 5, and Step 6 so
all references to check_env.py and the other helpers work regardless of install
location.
| 6. Capture evidence according to `CHECK_LEVEL` (Checkpoint 3). Capture a screenshot at **every** state that helps prove the issue — not just one. Typical moments: the setup/precondition state, immediately **before** the key action, the **after**/result state, and any **error** state. Collect all filenames into a `SCREENSHOTS` list. | ||
| - **Always:** For each screenshot, derive a base slug from the issue summary (lowercase, spaces → hyphens, strip special chars, max 50 chars). Append a short state descriptor and the salt: `<summary-slug>-<state>-<SALT>.png` (e.g. `field-resets-after-save-before-84aed1ae.png`). When only one screenshot is meaningful, the `-<state>` segment may be omitted. Call `browser_take_screenshot` with `fullPage: true` and `filename: "<EVIDENCES_DIR><filename>.png"` (absolute path). Append the path to `SCREENSHOTS`. | ||
| - **+ Network:** Call `browser_network_requests` — record endpoint, method, request body, response status + body. | ||
| - **+ Console:** Call `browser_console_messages` — record JS errors and warnings. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Make the screenshot naming flow deterministic.
<summary-slug>-<state>-<SALT>.png already includes the extension, so "<EVIDENCES_DIR><filename>.png" will produce *.png.png. More importantly, Step 3 asks for the final issue summary before Step 5 has produced it, so the slug source is circular. Derive the slug from a working draft or the scenario before capture, or move the naming rule to Step 5.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/skills/create-jira-issue-from-user-input/SKILL.md around lines 191 -
194, The screenshot naming flow in the SKILL.md evidence capture step is
inconsistent: the filename rule adds “.png” twice and the slug source depends on
the final issue summary before it exists. Update the evidence step around the
browser_take_screenshot / SCREENSHOTS guidance to use a filename format that
does not append a second extension, and make the slug come from a draft/scenario
identifier or move the naming rule to the step where the final summary is
available. Keep the rest of the capture requirements (fullPage, append to
SCREENSHOTS, network, console) unchanged.
| --- | ||
|
|
||
| ## Environment | ||
| - **App:** <app / surface name> |
| --- | ||
|
|
||
| ## Steps to Reproduce | ||
| 1. Log in to <app name> (<app URL>) |
There was a problem hiding this comment.
not every application requires login, right?
| @@ -0,0 +1,84 @@ | |||
| # create-jira-issue-from-user-input | |||
|
|
|||
| A Cursor agent skill that turns a free-text scenario into a well-formed Jira | |||
There was a problem hiding this comment.
is it Cursor-specific or tool-agnostic?
|
|
||
| - "create a jira issue: <field> resets after save" | ||
| - "log a bug — <action> produces the wrong <result>" | ||
| - "file a task to add validation on the <field> field" |
There was a problem hiding this comment.
does it make sense to put specific examples? not templated?
| --- | ||
| name: create-jira-issue-from-user-input | ||
| description: >- | ||
| [AQA] Turn a free-text scenario into a Jira Bug or Task: explore it in the dev |
| screenshots, then create the issue with a full reproduction write-up and | ||
| attachments after user approval. Use when the user says "create issue", | ||
| "log a bug", "create a task", "file a ticket", "create jira issue", | ||
| "report a bug", or describes a bug/task scenario to be reproduced and logged. |
There was a problem hiding this comment.
does it make sense to stress that this skill for web-apps only?
| required variable names explicitly: | ||
|
|
||
| ```bash | ||
| python3 .cursor/skills/create-jira-issue-from-user-input/scripts/check_env.py \ |
fa72e54 to
83febad
Compare
Summary by CodeRabbit
New Features
Documentation