From copilot-cli-toolkit
Verifies staged git files against ADR-034 allowlist for investigation-only QA skip eligibility before committing with 'SKIPPED investigation-only' verdict. Runs test_investigation_eligibility.py and outputs JSON status.
npx claudepluginhub rjmurillo/ai-agentsThis skill uses the workspace's default tool permissions.
Skills for session management and protocol compliance.
Checks if staged git files qualify for investigation-only QA skip per ADR-034 before committing with 'SKIPPED investigation-only' verdict. Use for protocol-compliant session management.
Checks if staged Git files qualify for investigation-only QA skip per ADR-034 by validating against allowed paths like .agents/sessions/, .agents/analysis/. Use before 'SKIPPED: investigation-only' commits.
Defines canonical quality gate commands for typecheck, test, and lint with four variants (Baseline, Incremental, Full Gate, Per-File) for session-start, wave-executor, and reviewer skills.
Share bugs, ideas, or general feedback.
Skills for session management and protocol compliance.
| Phrase | Action |
|---|---|
Check if I can skip QA | Run test_investigation_eligibility.py |
Am I eligible for investigation-only? | Verify staged files against ADR-034 allowlist |
Verify investigation session eligibility | Check QA skip eligibility before commit |
Can I use SKIPPED: investigation-only? | Validate investigation-only exemption |
Test eligibility for QA skip | Execute eligibility check script |
Use this skill when:
Use session-init instead when:
Use the qa agent instead when:
| Step | Action | Tool | Output |
|---|---|---|---|
| 1.1 | Stage files for commit | git add | Files added to staging area |
| 1.2 | Run eligibility check | test_investigation_eligibility.py | JSON with Eligible, StagedFiles, Violations |
| 1.3 | Verify Eligible=true | Parse JSON output | Boolean result |
| Step | Action | Condition | Next Step |
|---|---|---|---|
| 2.1 | Proceed with investigation-only skip | Eligible=true, Violations=[] | Use "SKIPPED: investigation-only" |
| 2.2 | Address violations or invoke qa agent | Eligible=false | Fix violations or start new session |
| Skill | Purpose | When to Use |
|---|---|---|
| Test-InvestigationEligibility | Check if staged files qualify for investigation-only QA skip | Before committing with SKIPPED: investigation-only |
Check if staged files qualify for investigation-only QA skip per ADR-034.
python3 .claude/skills/session/scripts/test_investigation_eligibility.py
Returns JSON with:
| Field | Type | Description |
|---|---|---|
Eligible | boolean | true if all staged files are in allowlist |
StagedFiles | array | All staged file paths |
Violations | array | Files not in allowlist (empty if eligible) |
AllowedPaths | array | Reference list of allowed path prefixes |
Error | string | Present only on git errors |
| Code | Meaning |
|---|---|
| 0 | Success (eligibility result in JSON output) |
Note: The script always exits 0. Check the Eligible field in the JSON output to determine eligibility. The Error field is present when git commands fail.
| Scenario | Behavior | Output |
|---|---|---|
| Not in git repository | Returns JSON with Eligible: false | Error field explains the issue |
| Git command fails | Returns JSON with Eligible: false | Error field explains the issue |
| Empty staged files | Returns JSON with Eligible: true | StagedFiles is empty array |
| Mixed allowed/disallowed files | Returns JSON with Eligible: false | Violations lists disallowed files |
Eligible (investigation-only files):
{
"Eligible": true,
"StagedFiles": [".agents/sessions/2025-01-01-session-01.md"],
"Violations": [],
"AllowedPaths": [
".agents/sessions/",
".agents/analysis/",
".agents/retrospective/",
".serena/memories/",
".agents/security/"
]
}
Not eligible (contains code files):
{
"Eligible": false,
"StagedFiles": [
".agents/sessions/2025-01-01-session-01.md",
"scripts/MyScript.ps1"
],
"Violations": ["scripts/MyScript.ps1"],
"AllowedPaths": [
".agents/sessions/",
".agents/analysis/",
".agents/retrospective/",
".serena/memories/",
".agents/security/"
]
}
Git error:
{
"Eligible": false,
"StagedFiles": [],
"Violations": [],
"AllowedPaths": [
".agents/sessions/",
".agents/analysis/",
".agents/retrospective/",
".serena/memories/",
".agents/security/"
],
"Error": "Not in a git repository or git command failed"
}
This skill implements the verification step for Phase 2.5: QA Validation of the Session End Protocol:
SESSION-PROTOCOL.md (Phase 2.5: QA Validation)
│
├── Feature implementation → MUST invoke qa agent
│
└── Investigation session → MAY skip QA
│
└── test_investigation_eligibility.py
│
├── Eligible: true → Use "SKIPPED: investigation-only"
│
└── Eligible: false → MUST invoke qa agent
1. Stage your files
│
└── git add .agents/sessions/... .serena/memories/...
2. Run eligibility check
│
└── python3 .claude/skills/session/scripts/test_investigation_eligibility.py
3. Check output
│
├── Eligible: true
│ └── Safe to commit with "SKIPPED: investigation-only"
│
└── Eligible: false
│
├── Check Violations array
│ └── Either: Remove violating files from staging
│ └── Or: Start new session for implementation work
│
└── Invoke qa agent for the implementation work
Use this skill to validate the QA skip condition:
### Session End (COMPLETE ALL before closing)
| Req | Step | Status | Evidence |
|-----|------|--------|----------|
| MUST | Route to qa agent (feature implementation) | [x] | `SKIPPED: investigation-only` - Verified via test_investigation_eligibility.py |
These paths qualify for investigation-only QA exemption:
| Path | Purpose |
|---|---|
.agents/sessions/ | Session logs documenting work |
.agents/analysis/ | Investigation outputs and findings |
.agents/retrospective/ | Learnings and retrospective documents |
.serena/memories/ | Cross-session context storage |
.agents/security/ | Security assessments and reviews |
Important: This allowlist is defined by ADR-034 (Investigation Session QA Exemption). The patterns in test_investigation_eligibility.py are validated by Pester tests to ensure they match the ADR specification.
| Avoid | Why | Instead |
|---|---|---|
| Skipping eligibility check | May commit ineligible files with investigation-only skip | Always run the skill before using the skip |
| Ignoring violations | QA exemption won't be valid | Address violations or invoke qa agent |
| Using for code changes | Investigation-only is for analysis, not implementation | Start a new session for code work |
| Hardcoding path checks | Patterns may drift from ADR-034 specification | Use this skill which implements the ADR patterns |
After using this skill:
Eligible: trueViolations in outputError field in outputChecks if staged files qualify for investigation-only QA skip per ADR-034.
python3 .claude/skills/session/scripts/test_investigation_eligibility.py
| Reference | Description |
|---|---|
| ADR-034 | Investigation Session QA Exemption architecture decision |
| SESSION-PROTOCOL.md | Session start/end requirements (Phase 2.5) |
| Issue #662 | Create QA skip eligibility check skill |
| validate_session_json.py | Validates session JSON format (separate from eligibility) |
| test_investigation_eligibility.py | Pytest tests ensuring pattern consistency |