status
Discovery + housekeeping pass over <workspace>\Active\. Refresh PlanningWorkspace, sync Jira Status field on local files, sweep completed items, print dashboard (markdown + HTML), suggest next work, surface unimported Jira tickets. No dispatch.
What this skill does
In this skill, `<workspace>` refers to the Workspace path defined in the workspace `CLAUDE.md` `## Configuration` block. `<CloudId>` refers to the Jira CloudId from the same Configuration block.
# Status
Run a discovery + housekeeping pass over `<workspace>\Active\`. Idempotent — re-runs cheaply. Owns all writes to the `Jira Status:` field on local issue files. Does NOT dispatch any work (`/work` does that).
## Status fields
See workflow.md > "Two-Field Status Model" for canonical definitions. Short version: `Status:` is the local workflow state owned by Claude and the user — `/status` never touches it. `Jira Status:` is the Jira mirror, owned by this skill (the only writer); refreshed in Phase 2. Adhoc items only carry `Status:`.
## Configuration
Read from the workspace `CLAUDE.md` `## Configuration` block:
- `Workspace path` (referred to as `<workspace>`)
- `Jira CloudId` (referred to as `<CloudId>`)
- `Discovery JQL` (used in Phase 5 — the JQL string that surfaces assigned-but-unimported tickets)
Hardcoded in this skill:
- PlanningWorkspace: `<workspace>\PlanningWorkspace\`
- Active folder: `<workspace>\Active\`
- Complete folder: `<workspace>\Complete\`
- Jira key pattern (regex): `^[A-Z]+-\d+$`
## Mode
Full pass only. `/status` does not accept arguments. (For targeted-item behavior, use `/work <hint>`.)
## Phases
Run these phases in order.
### Phase 0: Atlassian probe
Call `mcp__plugin_atlassian_atlassian__atlassianUserInfo` with no parameters. On failure (network error, auth error, timeout, any non-200 response), print exactly:
```
VPN check failed — Atlassian API unreachable. Connect to VPN and re-run /status.
```
and stop.
Note: `/status` does NOT probe the on-prem VPN host. PlanningWorkspace refresh (Phase 1) talks to GitHub / Azure DevOps for those repos, not the on-prem server. If you also need to dispatch work, `/work` will do its own on-prem VPN probe.
### Phase 1: Refresh PlanningWorkspace
For each subdirectory in `<workspace>\PlanningWorkspace\`, fetch + reset to `origin/main`. If a repo fails (network, conflict, missing remote), capture the error and continue with the next repo. Track failed repos for Phase 6.
Use this single bash command (substitute the actual workspace path):
```bash
cd <workspace>/PlanningWorkspace && for dir in */; do
echo "=== $dir ==="
(cd "$dir" && git fetch origin 2>&1 && git reset --hard origin/main 2>&1) || echo "FAILED: $dir"
done
```
### Phase 2: Refresh `Jira Status:` on ticketed items
Phase 2 refreshes the **`Jira Status:`** field only. It NEVER touches the local **`Status:`** field.
1. Enumerate all `<workspace>\Active\*\` directories via Glob.
2. For each directory `<DIR>`:
- If `<DIR>` matches the Jira-key regex (`^[A-Z]+-\d+$`), it is a **ticketed item**.
- Otherwise, it is an **adhoc item** — skip.
3. For each ticketed item:
- Read the issue file at `<workspace>\Active\<DIR>\<DIR>.md`.
- Extract the current `Jira Status:` field, if present. If missing, treat the previous value as empty.
- Call `mcp__plugin_atlassian_atlassian__getJiraIssue` with `cloudId: <CloudId>`, `issueIdOrKey: <DIR>`, `fields: ["status"]`.
- Compare the new Jira status name to the local field (case-insensitive after trimming).
- **If they match:** do nothing.
- **If they differ (or the field is missing):**
- Update or insert the `Jira Status:` line with the new value (preserve Jira's casing). If missing, insert directly below the `Jira:` URL line.
- Insert at the top of Discussion (right after the `_(Newest first - format: [agent] message)_` line, before existing entries): `[sync] Jira status changed from <old-value> to <new-value>.` Use `(none)` for `<old-value>` if the field was missing.
To insert at the top of Discussion safely with the Edit tool, find the existing first non-blank line under the Discussion header and insert the new line above it.
### Phase 3: Sweep completed work
1. Re-enumerate all `Active\*\` directories (Phase 2 may have updated `Jira Status:` to a sweep-triggering value).
2. For each directory `<DIR>`:
- Read `Active\<DIR>\<DIR>.md`.
- Extract local `Status:` field. For ticketed items, also extract `Jira Status:` field.
- Determine if it should be swept:
- **Ticketed** (`<DIR>` matches Jira-key regex): sweep if **either** of the following (case-insensitive, trimmed):
- local `Status:` is `Complete`
- `Jira Status:` is `Complete` OR `Development Complete`
- **Adhoc**: sweep if local `Status:` is `Complete` (case-insensitive).
3. For each item to sweep:
```bash
mv "<workspace>/Active/<DIR>" "<workspace>/Complete/<DIR>"
rm -rf "<workspace>/Complete/<DIR>/AgentWorkspace"
```
4. Track swept items for Phase 6.
### Phase 4: Dashboard
1. Re-enumerate `Active\*\` directories (after sweep).
2. For each directory, read its `<DIR>.md` file and extract: Title, Status, Tier, Mode, Jira (`Jira Status:` or `-`), Branch, Blocked, Next (`agent` if `go` line present, else `user`).
3. Print:
```
Active Work (<N> items)
| Key | Title | Status | Tier | Mode | Jira | Next | Branch | Blocked |
|----------|--------------------------------|----------------------|----------|---------|----------------------|-------|--------------|---------|
| <key> | <title> | <status> | <tier> | <mode> | <jira> | <next>| <branch> | <blocked> |
...
Ready for agent: <K> items have `go` flag (<comma-separated keys>)
Locked to chat: <L> items have Mode: direct (<comma-separated keys>)
```
- Truncate Title to 30 characters with `…` if longer.
- If `<N>` is 0, print `Active Work (0 items)` and skip the table.
- If `<K>` is 0, print `Ready for agent: 0 items.`
**Also write `<workspace>\dashboard.html`** (when `<N>` ≥ 1):
Single-file dark-themed HTML report with the same per-item data, rendered as a card/table action board. Color-code rows by `Status:`, show `Jira Status:` and `Branch` as clickable links where applicable, mark `Mode: direct` items with a distinct badge. Skip the HTML write if `<N>` is 0 — leave any prior `dashboard.html` in place.
### Phase 5: Suggest next work + Pull from Jira
Bucket every Active item into exactly one of these groups based on the issue file's local `Status:`:
| Bucket | Inclusion rule | Hint to print |
|--------|----------------|---------------|
| **Merge & transition Jira** | `Status: Development Complete` | merge PR, then move Jira |
| **Review PR** | `Status: Code Review` AND `Branch:` is non-empty | PR awaiting your review |
| **Review plan** | `Status: Code Review` AND `Branch:` is empty | plan.md awaiting your review |
| **Resume dev** | `Status: Development` (or `In Development`) AND file has no `go` line | add `go` to resume |
| **Kick off planning** | `Status: Planning` AND file has no `go` line AND no `plan.md` exists | add `go` to start planning |
| **Plan delivered, awaiting approval** | `Status: Planning` AND file has no `go` line AND `plan.md` exists | review plan.md, then add `go` with approval |
| **Tracking / parent** | anything else (rare) | no immediate action |
Within each bucket, sort by Priority (`High` > `Medium` > `Low`), then by directory name.
Print:
```
What to do next
<Bucket name> (N):
- <KEY> — <title> — <hint>
- ...
```
Truncate title to 50 chars with `…` if longer. Omit empty buckets. If every Active item lands in **Tracking / parent**, print:
```
What to do next
Nothing in Active is waiting on you. Pull a new ticket with /jira-import.
```
**Pull from Jira (JQL):**
After the in-chat "What to do next" output:
1. Call `mcp__plugin_atlassian_atlassian__searchJiraIssuesUsingJql` with:
- `cloudId: <CloudId>`
- `jql: <Discovery JQL>` (from `## Configuration` — typically `project in (CRD, CO) AND status != Complete AND assignee = currentUser()`)
- `fields: ["summary", "status", "priority"]`
2. Build a "known keys" set from dirRelated in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.