Repository navigation
feat(jira): baton jira prints a ticket for the orchestrator - #43
Merged
Merged
Conversation
baton jira <KEY> prints a Jira ticket and its comments as Markdown, for the orchestrator to plan from. It reads the site and the email from the config file's new jira section, and the user's scoped read-only API token from the keychain, through /usr/bin/security by its full path. It checks the key before it reads the keychain, and drops control characters from what it prints, so that a ticket can't send escape sequences to the pane's terminal. The guard runs it unasked in the orchestrator's pane and denies it to the roles. The orchestrator's prompt reads a ticket that the user names with it, and treats the ticket's text as the work to plan, not as the user's word. Decision 60, fact 42, risk 14 and the README's Jira section explain the setup. Decision 34 records the user's call on the keychain's exec.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



baton jira <KEY>prints a Jira ticket and its comments as Markdown, for the orchestrator to plan from. This is plan row 66, the last of the three Jira steps after #41 and #42.What
jirasection, such as{"site": "example.atlassian.net", "email": "you@example.com"}, layered per repo like the other settings. The site must be a bare host name, and the email a bare address.baton-jiraand its account is the email. The newinternal/keychainreads it through/usr/bin/security find-generic-password -w, by that full path. A missing item fails with thesecurity add-generic-passwordcommand that adds it, with the email quoted for the shell.read:jira-workalone; the keychain item).security's exit codes, options and default trust, token expiry), risk 14 (prompt injection through a ticket; any program running as the user can read the keychain item). Decisions 34 and 54 and open question 2 are amended.Suppression
There is one new
//nolint:gosec(G204) at the keychain's exec, with its reason. It follows the user's answer of 2026-11-04 through nudge ("nolint + reason there; NOSONAR only if Sonar flags it"), and decision 34 records it.Checks
mise run check: green; coverage 99.4% in total, 100% forinternal/keychain,internal/configandinternal/jira.%w. One mutant that didn't compile was rewritten.-h;jirasection;security, giving the hint with the email shell-quoted.Not in this PR
A hint for an expired token (a 401). It will be worded once the live check shows the gateway's real 401 text.