| name | creating-pds-issues |
| description | Create GitHub issues in NASA-PDS repositories using organizational templates (bug reports, I&T bug reports, feature requests, tasks, vulnerabilities, release themes). Use when user requests to create, file, or submit PDS issues. |
Creating PDS Issues Skill
This skill creates GitHub issues in NASA-PDS repositories using the official organizational templates. It ensures consistent issue formatting while keeping content clear and concise.
Prerequisites
- GitHub CLI (
gh) must be installed and authenticated - User must have write access to the target NASA-PDS repository
Workflow
1. Gather Information
Detect Current Repository (if applicable):
If the user is running this skill from within a cloned git repository, automatically detect the repository name:
# Check if in a git repo - try origin first, then upstream
git remote get-url origin 2>/dev/null || git remote get-url upstream 2>/dev/null
If the remote URL matches NASA-PDS/<repo-name>, use that as the default repository.
Edge Cases:
- Multiple remotes: Prefer
originfirst, then fall back toupstreamor other NASA-PDS remotes - Forks: If the detected repository is a fork (personal namespace), check for an
upstreamremote pointing to NASA-PDS - Non-NASA-PDS repos: If no NASA-PDS remote is found, ask the user which repository to use
- Ambiguous remotes: If multiple NASA-PDS remotes exist, ask the user to clarify
Determine Issue Type:
Ask the user what type of issue to create using the AskUserQuestion tool with these options:
- Bug Report - Report defects or unexpected behavior
- I&T Bug Report - Internal Integration & Test bug report (requires test case references)
- Feature Request - Propose new features or enhancements
- Task - Internal development task (often sub-tasks of larger stories)
- Vulnerability - Security vulnerabilities or threats
- Release Theme - High-level epic for release planning
Gather Template-Specific Information:
Then gather the required information based on the template type:
For Bug Reports:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- Brief title following format:
<system feature> <is not/does not> <expected behaviour> - Bug description (what happened)
- Expected behavior (what should have happened)
- Steps to reproduce (numbered list)
- Environment info (version, OS, etc.)
For I&T Bug Reports:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- Brief title following format:
<system feature> <is not/does not> <expected behaviour> - Bug description (what happened)
- Expected behavior (what should have happened)
- Related test cases (TestRail or other test case references - REQUIRED)
- Steps to reproduce (numbered list)
- Environment info (version, OS, etc.)
For Feature Requests:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- User story title:
As a <role>, I want to <accomplish> - User persona (e.g., "Data Engineer", "Node Operator")
- Motivation (why is this needed?)
- Additional context
For Tasks:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- Task type (sub-task or theme)
- Description (clear but not excessive)
For Vulnerabilities:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- Title:
<system feature> <is not/does not> <expected behaviour> - Vulnerability description
- Expected secure behavior
- Reproduction steps
- Environment info
For Release Themes:
- Repository name (auto-detect from git remote, or ask if not in a repo or unclear)
- Description of the release theme
2. Fill the Template
Use the cached templates in resources/templates/ directory. If templates are not cached, run the caching script first:
cd creating-pds-issues
node scripts/cache-templates.mjs
Fill templates with these guidelines:
Content Style:
- Be clear and specific, but concise
- Avoid unnecessary elaboration or "novel-length" descriptions
- Use bullet points and numbered lists for clarity
- Include only essential technical details
- Skip optional fields unless user provides information
Security and Privacy - CRITICAL:
- Remove or sanitize all sensitive information before creating the issue
- Replace actual file paths with generic examples (e.g.,
/Users/john/secrets/api-keys.txt→/path/to/file.txt) - Remove usernames, email addresses, and personal identifiers
- Replace IP addresses with dummy values (e.g.,
192.168.1.100→10.0.0.1) - Strip API keys, tokens, passwords, and credentials
- Sanitize database connection strings and internal URLs
- Use placeholder hostnames (e.g.,
prod-server-01.internal.nasa.gov→server.example.com) - Remove proprietary or confidential information
- If uncertain whether information is sensitive, ASK THE USER before including it
Required Field Examples:
Bug description (good):
When validating a PDS4 label with nested tables, the validator throws a NullPointerException
on line 342 of TableValidator.java. This occurs with labels containing 3+ nested table
definitions.
Bug description (too verbose):
I was working on my project late last night and I noticed that when I tried to validate
my carefully crafted PDS4 label that I had been working on for several days, the system
unexpectedly threw an error. I had been following all the documentation...
[continues for several paragraphs]
Expected behavior (good):
Validator should successfully validate labels with nested tables or provide a clear
error message about nesting limitations.
Reproduction steps (good):
1. Create PDS4 label with 3 nested <Table_Delimited> elements
2. Run: validate my-label.xml
3. Observe NullPointerException in output
Feature motivation (good):
...so that I can validate labels in CI/CD pipelines without manual intervention,
reducing deployment time from hours to minutes.
Sanitization Examples:
Before (UNSAFE - contains sensitive info):
When I run the validator on /Users/alice.johnson/Documents/NASA/mission-data/secret-project/labels/experiment-123.xml
using the API key sk-1234567890abcdef, it fails to connect to the database at
postgresql://admin:P@ssw0rd123@10.42.15.8:5432/pds_prod
After (SAFE - sanitized):
When running the validator on a PDS4 label file with the API configured, it fails to
connect to the PostgreSQL database with a connection timeout error.
Before (UNSAFE - contains internal paths):
The error log at /home/ops/pds-services/logs/validator-2024-11-13-prod.log shows:
ERROR: Connection refused by host pds-db-primary-01.jpl.nasa.gov
After (SAFE - sanitized):
The error log shows:
ERROR: Connection refused by database host
3. Create the Issue
Use GitHub CLI to create the issue with appropriate labels and metadata:
Default Assignee:
By default, issues requiring triage are assigned to jordanpadams. Users can override this by setting the PDS_ISSUE_ASSIGNEE environment variable or by using the --assignee flag.
Bug Report:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "bug,needs:triage" \
--assignee "${PDS_ISSUE_ASSIGNEE:-jordanpadams}"
I&T Bug Report:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "B15.1,bug,needs:triage" \
--assignee "${PDS_ISSUE_ASSIGNEE:-jordanpadams}"
Feature Request:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "needs:triage,requirement" \
--assignee "${PDS_ISSUE_ASSIGNEE:-jordanpadams}"
Task:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "task,i&t.skip"
Vulnerability:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "security,bug,needs:triage" \
--assignee "${PDS_ISSUE_ASSIGNEE:-jordanpadams}"
Release Theme:
gh issue create \
--repo NASA-PDS/<repo-name> \
--title "<title>" \
--body "<filled-template-body>" \
--label "theme,Epic,i&t.skip"
Template Body Format:
The body should mirror the YAML template structure but in markdown. For example, a bug report body:
## Checked for duplicates
Yes - I've already checked
## 🐛 Describe the bug
[Bug description here]
## 🕵️ Expected behavior
[Expected behavior here]
## 📜 To Reproduce
1. [Step 1]
2. [Step 2]
3. [Step 3]
## 🖥 Environment Info
- Version of this software: vX.Y.Z
- Operating System: [OS details]
## 📚 Version of Software Used
[Version details]
## 🩺 Test Data / Additional context
[Context or N/A]
## 🦄 Related requirements
N/A
---
## For Internal Dev Team To Complete
## ⚙️ Engineering Details
[To be filled by engineering team]
## 🎉 Integration & Test
[To be filled by engineering team]
4. Confirm Success
After creating the issue:
- Display the issue URL to the user
- Confirm the issue was created successfully
- Remind user that internal sections (Engineering Details, I&T) will be filled by the PDS engineering team
Important Notes
- All issues are added to project NASA-PDS/6 (PDS Engineering portfolio backlog)
- Default assignee is jordanpadams for triage (configurable via
PDS_ISSUE_ASSIGNEEenvironment variable) - Leave internal sections blank - "Engineering Details" and "Integration & Test" fields are filled by the PDS engineering team after triage
- Skip optional fields unless user explicitly provides information
- Validate repository exists before creating issue using
gh repo view NASA-PDS/<repo-name>
Template Caching
Templates are cached locally in resources/templates/ to avoid repeated GitHub API calls. The caching script should:
- Clone or fetch the latest templates from NASA-PDS/.github
- Store them in
resources/templates/ - Update a timestamp file to track last cache update
Cache templates on first use or if cache is older than 7 days.
Forcing Cache Refresh:
If templates have been updated in NASA-PDS/.github and you need to refresh immediately:
# Option 1: Delete cache directory and re-run caching script
rm -rf creating-pds-issues/resources/templates/
cd creating-pds-issues
node scripts/cache-templates.mjs
# Option 2: Delete timestamp file to trigger automatic refresh
rm creating-pds-issues/resources/templates/.cache-timestamp
# Next skill invocation will automatically refresh templates
# Option 3: Set environment variable to force refresh
FORCE_TEMPLATE_REFRESH=true node scripts/cache-templates.mjs
Error Handling
- If GitHub CLI is not authenticated, prompt:
gh auth login - If repository doesn't exist, list available repos:
gh repo list NASA-PDS --limit 100 - If user lacks write access, display error and suggest contacting PDS Help Desk
- If required information is missing, ask user for specific details needed
Example Invocations
User: "Create a bug report for pds-registry about validation errors" → Ask which template, gather bug details, create issue
User: "File a feature request for the API to support batch operations" → Ask which repo, gather user story details, create issue
User: "I need to create a security vulnerability issue for validate" → Use vulnerability template, gather security details, create issue