diff --git a/cli/guide/tools.html b/cli/guide/tools.html index 6813ae6..2005461 100644 --- a/cli/guide/tools.html +++ b/cli/guide/tools.html @@ -126,6 +126,7 @@ ✅ c3_task 🪣 c3_bitbucket 🔐 c3_credentials + 🎫 c3_jira
@@ -1280,6 +1282,57 @@Surfaces: the c3 creds CLI (set / get / list / rm / import .env, --global for the shared scope), a per-project dashboard Credentials tab, and — since v2.59.0 — a top-level Credentials view in the Hub: a Global-vault manager plus a per-project browser with shadowing shown both ways ("shadows global" on project entries, "shadowed in N projects" on globals); the Hub's per-project drill panel manages too. No HTTP route ever returns a stored value (write-only wire contract, endpoint-sweep tested), every mutation is ledger-logged by name, the vault is hard-excluded from the Oracle Discovery API, and cross-project (c3_project) shells run with credentials disabled.
One tool for both Jira deployments: Cloud (REST v3, email + API token, ADF bodies handled transparently) and self-hosted Data Center / Server (REST v2, PAT Bearer, plain-text bodies) — normalized to a single DTO surface with an opaque pagination cursor. Transport is stdlib urllib (no new dependencies); reads get one bounded 429 retry honoring Retry-After, mutations are never auto-retried. Tokens live in the OS keyring keyed by (base_url, username); the jira config section resolves project → home wholesale from a single file, so a repository's committed config can never field-override a home account's URL or TLS settings (credential-redirect hardening). HTTPS-only.
Setup: c3 jira login --url https://yoursite.atlassian.net (Cloud inferred for *.atlassian.net; add --deployment data_center for self-hosted, --ca-bundle for enterprise certs, --global for a home config reusable across projects), then c3 jira set-default --project PROJ. Manage accounts with c3 jira status / use / logout.
| Action | Group | Description |
|---|---|---|
| status, whoami | Read | Active account, deployment, defaults, server probe / authenticated user |
| search | Read | Raw JQL, paginated (helper-built JQL elsewhere is always quoted) |
| my_issues | Read | Open issues assigned to the token's user (statusCategory-aware) |
| get_issue, list_projects, list_transitions | Read | Issue detail with comments / project discovery / legal transitions for an issue |
| get_create_metadata, search_users | Read | Required + allowed fields per project/type; user lookup for assignment |
| create_issue | Write | Pre-validates against create metadata and returns machine-readable missing required fields instead of guessing defaults |
| comment, transition, assign | Write | Comment on / move (accepts transition id or name) / assign an issue |
# Connection + account probe, then my open work
+c3_jira(action='status')
+c3_jira(action='my_issues')
+
+# Raw JQL search
+c3_jira(action='search', jql='project = PROJ AND status != Done ORDER BY updated DESC')
+
+# Create — required fields come from metadata, not guesses
+c3_jira(action='get_create_metadata', project='PROJ', issue_type='Task')
+c3_jira(action='create_issue', project='PROJ', issue_type='Task',
+ summary='Fix login flow', description='Steps in thread')
+
+# Move it along — id or name both work
+c3_jira(action='list_transitions', issue='PROJ-123')
+c3_jira(action='transition', issue='PROJ-123', transition='In Progress')
+c3_jira(action='comment', issue='PROJ-123', body='Deployed to staging')
+
+ Surfaces & audit: the per-project dashboard gets a Jira tab (My Work board grouped by statusCategory, JQL search, an issue drawer with transition buttons + comments, and an Activity view) backed by /api/jira/* routes. Issue keys like PROJ-123 are auto-linked from branch names and edit-ledger entries (acronym denylist, so UTF-8 / SHA-256 / CVE-2024 never match), and the issue drawer shows the local ledger activity for the open issue — that Activity view works with no account configured. Mutations (create_issue, comment, transition, assign) are edit-ledger-logged with identifiers only — bodies are never logged. Read actions are safe in plan mode.