Commit Graph
100 Commits
Author SHA1 Message Date
bircni 517d164d8a fix(git): prefer the upstream remote over a tracked origin when finding the repository (follow gh)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 18:59:04 +02:00
bircni 2a221d0a81 fix: seed issue create from --template, edit and delete inline review comments, explain workflow run refs (follow gh)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 18:58:28 +02:00
bircni 0db9ed463e fix: pr-closed-lookup (follow gh: find closed and merged pull requests by branch)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 18:57:43 +02:00
bircni 9ce014bc75 fix: auth-decisions (follow gh: auth status exit code and GITEA_TOKEN account)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 18:57:25 +02:00
bircni 20b9b1a2c1 style: fix lint findings from the review fixes
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:43:58 +02:00
bircni d0cdfe7113 fix: address verified review findings (actions-runs-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:43:11 +02:00
bircni b69019fd74 fix: address verified review findings (admin-webhooks-keys-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:42:51 +02:00
bircni 0910cf307a fix: address verified review findings (terminal-forms-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:42:24 +02:00
bircni caeed59bc6 fix: address verified review findings (issues-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:41:33 +02:00
bircni e28bb6e039 fix: address verified review findings (labels-milestones-time-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:40:59 +02:00
bircni be3b8a1ced fix: address verified review findings (completion-target-ref-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:40:30 +02:00
bircni 432d139071 fix: address verified review findings (actions-workflows-values-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:40:06 +02:00
bircni 401650b489 fix: address verified review findings (pulls-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:39:24 +02:00
bircni 58f0fc4bf9 fix: address verified review findings (branches-checkout-status-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:53 +02:00
bircni 6e523d969d fix: address verified review findings (repo-mutations-sync-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:53 +02:00
bircni 0d47b3f149 fix: address verified review findings (auth-config-doctor-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:52 +02:00
bircni e15ea907be fix: address verified review findings (cli-core-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:52 +02:00
bircni a47dbc413c fix: address verified review findings (terminal-output-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:52 +02:00
bircni 6b847058eb fix: address verified review findings (api-transport-download-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:51 +02:00
bircni 45c564811e fix: address verified review findings (comments-views-search-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:51 +02:00
bircni 3e522ac5ec fix: address verified review findings (misc-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:50 +02:00
bircni 61f492d96d fix: address verified review findings (docs-deps-surface-1)
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:38:50 +02:00
bircni e0fc5e965d docs(config): describe every setting in config set --help
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:21:33 +02:00
bircni 0a02cb80c5 fix: keep the command word after a leading --json
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:20:24 +02:00
bircni 08ba777f2b fix(release): upload before deleting on --clobber; show repo view to readers without code access
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:19:54 +02:00
bircni 3d10badb8b fix: sanitize server text in pull request messages, auth status and notification watch
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:19:10 +02:00
bircni 04ad230d59 docs: note the 1.0 short-flag and argument changes; drop the stale retract
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:18:17 +02:00
bircni 0b7e2f01b0 perf(pr): read the pull request template with one request
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:17:51 +02:00
bircni 5f878c86ed fix(pr): do not delete a head branch that Gitea kept after a merge
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:17:38 +02:00
bircni d2e1c546e3 fix(pr): keep the body of a pending review when posting another review
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:17:24 +02:00
bircni 3a61db6533 feat(issue): list issues without an assignee with --no-assignee
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:17:11 +02:00
bircni bae885a4d2 fix(context): find the Gitea remote among all remotes of a clone
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:16:57 +02:00
bircni 51709abdc0 fix(wiki): list every page without stopping at an empty window
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:16:33 +02:00
bircni 064dbc1cbd fix(team): show public teams to non-members
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:16:19 +02:00
bircni 51c436ef11 fix(issue): resolve --milestone titles before IDs in list and search filters
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:16:05 +02:00
bircni 219798732d fix(auth): print only a token that belongs to the selected account
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:15:52 +02:00
bircni 4d6e68ed85 fix(doctor): check the account when the instance requires sign-in to view
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:15:38 +02:00
bircni f61ee4b4cc fix(repo): add the upstream remote when cloning a pull mirror
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:15:25 +02:00
bircni 843c3c2977 test: update the integration tests to the 1.0 command and output behavior
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:46 +02:00
bircni 061652810a fix(deps): update goldmark and golang.org/x modules
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:46 +02:00
bircni f75568a8df fix(release): refuse a stray true or false word after --draft and --prerelease on release edit
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:46 +02:00
bircni 7437f45d9a fix(team): keep the access of read and write teams when editing --unit
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:46 +02:00
bircni 45e015e7dc fix(auth): make logout reject only the credential tea stored
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:46 +02:00
bircni d67963b29a fix(terminal): drop escape sequences that markdown character references decode to
Signed-off-by: bircni <bircni@icloud.com>
2026-10-18 17:14:45 +02:00
bircni 09e9f7f668 docs: tighten the completion and 1.0 migration notes
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:49:33 +02:00
bircni 1917fc7471 refactor(terminal): inline the column fitting and shorten doc comments
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:49:33 +02:00
bircni dbe2d376fe refactor(services): share the SDK list-page wrapper
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:49:33 +02:00
bircni 9df6cb7dd3 test: merge duplicate terminal, git and Actions service tests
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:49:32 +02:00
bircni aee57be8b9 test(repo,release): fold the repo delete report into the --yes test and drop redundant setup
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:01 +02:00
bircni b79845b9f3 refactor(repo,org,team,release): trim help texts, obvious comments and single-use helpers
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:01 +02:00
bircni d5aef95855 test(pr): drop cases that repeat covered pr list, merge, review and diff paths
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni 2826726557 refactor(issue,pr): trim help, restating comments and single-use helpers
Cut issue, pr, label, milestone and comment examples to at most three, drop
doc comments that only restate the name, fold the comment and attachment
argument lookups into one closure each, and inline label helpers with one
caller.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni 4a85bb3d40 test(actions): drop duplicate cases and share the checks server
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni 71d84b070b refactor(actions): trim help examples and restating comments
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni f783de3564 docs(completion): shorten completer doc comments
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni fa9cb4f852 docs(help): trim examples and verbose doc comments in core commands
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni a0d4e85605 test(app): drop completion and table cases other tests already cover
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:48:00 +02:00
bircni a24acef26c fix(run): keep the permission bits of extracted artifact files
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:36:16 +02:00
bircni f51af883c6 fix(repo): archive after the other edits in repo edit
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:35:08 +02:00
bircni 1fa954b74b docs: drop planning IDs from code comments
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:33:45 +02:00
bircni 2c17f374cb fix(ref): treat X#N as a reference only when X names a repository
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:32:29 +02:00
bircni 048bb291fc fix(auth): resolve a bare GITEA_TOKEN host in completion and the Git helper
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:31:09 +02:00
bircni c22e8550da refactor(run): drop the unused job of a run URL
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:29:37 +02:00
bircni 57cbded4a0 fix(pr): delete the local branch on merge only when asked to
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:28:35 +02:00
bircni 102de5a2c2 fix(output): always report warnings on stderr
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:27:12 +02:00
bircni badd934d64 fix(pr): prefer an open pull request over a merged one recorded by checkout
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:25:40 +02:00
bircni 12972e6327 perf(services): stop reading pull requests once a filtered page is full
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:24:25 +02:00
bircni ac0127fa83 fix(git): refuse to sync a branch checked out in another worktree
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:23:02 +02:00
bircni ab8ba6df4f docs: shorten help and migration texts to gh-like brevity
Long texts no longer restate the flag list, the instance selection
of tea help environment, the config keys with descriptions or the
team argument rules shown under ARGUMENTS; webhook events come from
services.WebhookEvents; the migration guide refers to tea help
formatting for the terminal layout.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 20:14:09 +02:00
bircni 8bf979099b perf: drop wasted requests and reuse markdown renderers
pr edit with reviewers and other fields reads the pull request once,
org delete counts only repositories, org view counts concurrently,
team list skips the repository count of all-repository teams,
pr diff --web builds the URL locally, pr list re-reads pull requests
concurrently for review fields, and glamour renderers are built once
per width and color.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 18:44:29 +02:00
bircni af14803b3a refactor(services): leave CLI flag and command names to the app layer
Services report ErrRunScanExhausted, ErrMaxPages and plain conflicts,
and the commands add the --branch/--max-pages/--force hints. Unknown
label names use the shared NotFoundError, and the repository-scoped
review and team search refusal moves into tea search's own usage
check.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 18:44:29 +02:00
bircni f2f1dd1e34 refactor(flags): accept plural flag names through one normalize function
Every command accepts a flag's plural, such as --add-labels for
--add-label (D8), instead of per-command alias maps.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 18:44:29 +02:00
bircni dc24231ebc test: share the first-page and clock helpers
writeFirstPage answers paged listings in app and services tests,
testNow replaces the copied clock, withoutANSI the second color
stripper, and the single-entry table test becomes a plain test.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 14:25:38 +02:00
bircni 83924892ff refactor: reuse the existing service and rendering helpers
services.IsNotFound replaces the hand-rolled 404 checks, convertPage
the copied page conversions and lastPathNumber the comment's own
number parser. The List wrappers around ListPage of releases,
branches, wiki pages, secrets and variables go, pull request filters
resolve milestones through Milestones.FindOne like issues, and
localFlagsChanged, boolOrder, Cell.Render, stateBadge and dueText
replace their copies.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 11:22:52 +02:00
bircni 29f62da006 refactor: load settings once per run and reuse shared helpers
The application caches the settings snapshot and reloads it only after
an update through the store, so output and prompt helpers no longer
read and parse config.yml and hosts.yml several times per command.
canPrompt and chooser replace the inline prompt-policy checks.

Checks are tallied by one services.Tally, terminal.Plural replaces the
two app copies, refKind.article/noun replace the comment group's own
words, list commands use servicePage, and web URLs are built by
repositoryURL and webURL in browser.go.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:57:39 +02:00
bircni 9ac5b79e9e refactor(completion): name path arguments explicitly and share firstArg
The six commands that take a file or directory argument set their
completer directly instead of a Use-line parser wrapping every
command, the first-argument-only wrappers become one firstArg helper,
and only the bash completion help keeps a custom text.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:50:37 +02:00
bircni 1f4b5f868f refactor(prompts): fold Asker into Prompter and share delete confirmations
FormPrompter is the only production prompter and implements the rich
prompt API, so Ask, AskText and ConfirmDefault become the Prompter
interface and the plain Input/Confirm fallbacks go away.

Confirmations that default to no derive their non-terminal wording
from the prompt, and single deletes share deleteConfirmed for the
prompt, the request and the done line.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:47:54 +02:00
bircni 6b204a34c0 refactor(output): share the JSON, created-resource and batch tails
Mutations end with a.jsonResult or a.created instead of hand-rolled
--json branches, the two identical jsonResult/writeMutationJSON helpers
become one, and writeBatchJSON checks --json itself so batch commands
share one tail.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:43:46 +02:00
bircni 27e39ec4be refactor: drop the URL-based error classifier and hint lookups
Errors are named by the service call that failed: Classify,
NotFoundError and ConflictError at the call site. Remove the endpoint
parser that guessed the resource from the request path, and the
follow-up reads the explainer made at error time (repository state,
issue-vs-pull-request, the existing pull request's URL) together with
the credentialed transport each API error carried for them.

Calls that the endpoint parser covered and the services did not now
classify themselves: issues, pull requests, reviews, comments,
releases, branches, wiki pages, repositories, organizations and SSH
keys. Unclassified failures fall back to the generic
"not found (HTTP 404 GET ...)" text.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:40:45 +02:00
bircni ea13c9e4f5 refactor: remove features beyond the UX plan
Drop additions that the UX plan does not ask for:

- the interactive label edit form; label edit now requires a flag
- label clone and the skip mode of label creation it needed
- repo rename rewriting the Git remote or tea.repository; it now
  warns that the remote still points to the old name
- the extra "source" remote on clones of pull mirrors
- run artifact download, which duplicates run download --zip
- 256-color and 24-bit label swatches; colors stay ANSI 16
- config list --show-source (config get keeps it)
- the membership and access GETs before team member/repo add and
  remove; Gitea's PUT and DELETE are idempotent

label edit/delete keep --by-name: it is the only way to address a
label whose name is a number that is also another label's ID.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:36:50 +02:00
bircni 2ec16292f5 fix: name team repository arguments and release assets consistently
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:06:09 +02:00
bircni 43f35fdaed docs: describe the gh-style output, aliases and flags in the 1.0 guide
Update the migration guide for the output on terminals and in pipes,
markdown and hyperlink preferences, verb aliases and gh short flags, -q
and -y, exit codes, the inbox default of notifications, config get, auth
status and token, pr checkout branch names, pr review types, comment
commands, name addressing, and setup-git replacing old helpers. Fix the
merge example, which now needs --yes, and the contributor guide's output
and layering notes.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:05:15 +02:00
bircni 50a604f169 refactor: remove helpers the new output and prompts left unused
Drop writeDownload, terminal.Require, terminal.Confirm, terminal.Row,
terminal.Record and Pulls.FindOpenByHead, which no command calls anymore,
and point their tests at the code that replaced them.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:00:05 +02:00
bircni eff6efe759 test: require help texts on every command without allowlists
Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 10:00:05 +02:00
bircni 5fd4be9803 refactor(errors): explain failed requests through the SDK
The hints for a missing repository, a pull request number that names an
issue and an existing pull request read the API with raw GETs from the app
layer. Read them through SDK lookups in services, which reuse the failed
request's instance and credential, and let transport only hand out that
client.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 09:57:12 +02:00
bircni 03aa64233f refactor(completion): complete assignees and tags through the SDK
Completion fetched repository assignees and tags with raw GETs. List them
through new Repositories.Assignees and Repositories.Tags service methods on
the SDK, and remove the raw fetch helper.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 09:55:36 +02:00
bircni ae0ea27bb0 fix: reconcile the issues stream and remove the legacy output shims
Use one canPrompt and pullNumberArguments for the comment commands, set
display preferences instead of the retired environment variables in
tests, and delete writeList, writeItem, batch, table, writeRecord(s),
the legacy column map, confirm, require, validateMilestoneFlags and
listWindow now that every command uses their replacements.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:19:35 +02:00
bircni 511252e2a5 refactor(issue): share the prompt policy check of issue forms
issue create, issue edit and comment prompts ask canPrompt, like the
milestone and label forms, instead of loading the settings themselves.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:08 +02:00
bircni 01ced23a4a fix(issue): name missing issues and attachments in errors
tea issue close 999 printed "issue 999: not found (HTTP 404 GET …)" and
issue attachment view 1 9 blamed issue #1 for a missing attachment.
Batch commands (issue close, reopen, edit, milestone issue add and
remove) now report "issue 999: not found in alice/x", and attachment
commands "attachment 9 not found in alice/x#1".

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:08 +02:00
bircni 56c6ffc80b feat: accept days and weeks in --since and --until
tea issue list --since 7d was rejected; only h, m and s durations worked.
Time bounds such as --since, --until and --before now also take whole
days and weeks: 7d, 2w.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:08 +02:00
bircni 5d2f2d83eb feat(label): edit a label in a form without flags
label edit without flags on a terminal now opens a form with the label's
name, color, description and flags, like milestone edit and issue edit,
instead of failing; without a terminal it reports the shared "nothing to
edit" error. The help of issue and milestone close and reopen names its
commands without generating the text from the verb.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:08 +02:00
bircni f6a0d18b8a feat(search): gh-style issue and pull request search tables
search issue and search pr printed rows without a header, showed merged
pull requests as closed and never said that more results exist. They now
show REPO#ID TITLE STATE AUTHOR UPDATED under a context line that counts
the matches and points at the next page, are also search issues and
search prs, take -s -L -A -l -m and @me, and use --until for --before,
which still works. Search results gain an author JSON field.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:07 +02:00
bircni e5796af9e9 feat(attachment): download attachments under their own name
issue attachment download (and pr attachment download) required
--output-file. It now writes ./<name> like gh release download, refusing
to replace an existing file unless --clobber (or --skip-existing to keep
it), with -O/--output and -D/--dir from the shared download flags.
attachment list shows ID NAME SIZE DOWNLOADS CREATED with readable
sizes, attachment view is a view, and upload, rename and delete report
✓ lines; delete names the attachment in its confirmation. The commands
accept issue and pull request URLs and have help text with examples.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:05 +02:00
bircni 0f090654a4 feat(time): readable time tables with totals and gh-style feedback
time list printed Go durations (1h30m0s), raw timestamps and no issue
title. It now shows ID ISSUE USER SPENT WHEN with "#1 Login fails",
"1h 30m" and relative times on a terminal, followed by the total of the
listed time, and points at --mine when no repository is selected.
--issue takes issue URLs, --username takes @me, and --since replaces
--from, which still works.

time create (also add and log) reports "✓ Logged 1h 25m on alice/x#1
(title)"; time delete and reset name the time they delete in their
confirmation and ✓ line. Time records gain an issue_title JSON field.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:03 +02:00
bircni c161a63eb6 feat(milestone): milestone tables, views, forms and one selection model
milestone view printed the list row, and milestone list hid the due date
and progress. milestone list now shows ID TITLE [STATE] DUE PROGRESS, open
milestones first and by due date; milestone view shows the state, due
date, progress, description and the milestone's web page (also --web).

Every milestone command addresses milestones by title or ID. Mutations
report ✓ lines: milestone create also prints the new milestone's URL and
takes the title as an argument; close and reopen skip milestones already
in that state; delete names the milestone in its confirmation; milestone
issue add and remove report one line such as "✓ Added #1, #2 to
milestone "v1.0" in alice/x". milestone issue list uses the issue table.
milestone edit without flags on a terminal opens the milestone form with
the current values, and every milestone command completes milestone
titles and has help text with examples.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:17:02 +02:00
bircni 2ba02cf915 feat(label): address labels by name and add import and clone
label edit bug and label delete kind/feature failed with "invalid resource
number", and label create took its name as --name and required
--color. Like gh, label create takes the name as an argument and picks
a random color without -c; label edit and delete take names or IDs
(delete several at once, after a confirmation that names them), and
-c/-d/-n/-f are the gh short flags. Without a name on a terminal, label
create asks for the name, color and description.

label list shows ID NAME COLOR DESCRIPTION FLAGS with a colored swatch
and exclusive and archived labels flagged. Mutations report ✓ lines.
label import reads a label file or stdin (label create --file still
works), label clone copies another repository's labels, skipping those
that exist unless --force, and label export writes to stdout by default
or to -O/--output.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:16:09 +02:00
bircni 10417049a1 feat(comment): comment on issues and pull requests the gh way
tea issue comment 12 --body "LGTM" failed with "unknown flag: --body"; the
comment had to be created with issue comment create. issue comment and
pr comment now take the issue or pull request and -b/-F/-e directly,
plus --edit-last and --delete-last for your last comment. The
subcommands stay, create is also add, and a misspelled subcommand
suggests the right one.

Comments are written in the configured editor or a multi-line
"Comment (markdown):" field, which edits start from the current text,
without a confirmation afterwards. The new comment's URL goes to stdout
with a ✓ line; deletes ask "Delete comment 81 on alice/x#1?". comment
list shows each comment under a "#79 alice • about 2 hours ago"
heading on a terminal and as key/value blocks when piped, and comment
JSON gains issue_number.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:16:09 +02:00
bircni 0b6232087e feat(issue): gh-style issue list, view, create, edit, close and reopen
issue list renders through the shared table: a context line, ID TITLE
LABELS [STATE] [KIND] AUTHOR UPDATED with relative times on a terminal,
the ID colored by state and linked, and a stable tab-separated column
set when piped; empty results say so on stderr. It gains -s -L -l -a -A
-m -S -w, @me, comma-separated label and milestone filters, and --web.

issue view, edit, close and reopen accept #N, OWNER/REPO#N and issue
URLs. Mutations report "✓ Created/Edited/Closed issue alice/x#5 (title)"
on a terminal; issue create prints the new issue's URL on stdout (also
as issue new), and close and reopen skip issues already in that state
with a ! line and take -c/--comment. issue create and edit gain the gh
short flags and singular --add-label, --remove-label, --add-assignee and
--remove-assignee (the plural names still work), and create gains --web.

The interactive create form asks for the title and body, then "What's
next?" (submit, add metadata or cancel), without a confirmation after
it; the edit form names the issue it edits. Every issue command has help
text with examples and completes its flags and issue numbers.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:15:53 +02:00
bircni b892423545 fix(label): keep exclusive and archived flags in label export
label export wrote "#7057ff good first issue ;" with a dangling separator
and dropped the exclusive and archived flags, so an export and re-import
lost them. Rows now omit an empty description and end in " ;exclusive",
" ;archived" or both when a label has those flags; label create --file
reads them back.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:14:52 +02:00
bircni 8e5289149c fix(deadline): reject day/month dates that read differently by locale
--deadline 03/04/2026 was silently parsed as March 4. Numeric dates such
as 03/04/2026 or 15.01.2028 are now refused with "the order of day and
month is ambiguous; use YYYY-MM-DD", and the error for other invalid
values no longer suggests clearing on issue create.

Signed-off-by: bircni <bircni@icloud.com>
2026-10-12 00:14:52 +02:00