git-acta 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,541 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-acta
3
+ Version: 1.0.0
4
+ Summary: Structured git workflow CLI: conventional commits, trunk-based branches, GitHub PR lifecycle
5
+ Project-URL: Homepage, https://github.com/nicobc/git-acta
6
+ Project-URL: Source, https://github.com/nicobc/git-acta
7
+ Project-URL: Issues, https://github.com/nicobc/git-acta/issues
8
+ Author-email: Nicolas Contreras <nicolas.b.contreras@gmail.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Classifier: Environment :: Console
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Version Control :: Git
16
+ Requires-Python: >=3.10
17
+ Requires-Dist: click>=8.0
18
+ Description-Content-Type: text/markdown
19
+
20
+ # git-acta
21
+
22
+ [![PyPI version](https://img.shields.io/pypi/v/git-acta)](https://pypi.org/project/git-acta/)
23
+ [![Python versions](https://img.shields.io/pypi/pyversions/git-acta)](https://pypi.org/project/git-acta/)
24
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
25
+ [![CI](https://github.com/nicobc/git-acta/actions/workflows/test.yml/badge.svg)](https://github.com/nicobc/git-acta/actions/workflows/test.yml)
26
+
27
+ A structured git workflow CLI for [conventional commits](https://www.conventionalcommits.org/), trunk-based branching, and a clean GitHub PR lifecycle — all from the command line.
28
+
29
+ ## Philosophy
30
+
31
+ git-acta is built on three practices that reinforce each other: [trunk-based development](https://trunkbaseddevelopment.com/), [conventional commits](https://www.conventionalcommits.org/), and squash-merge-only history. Short-lived branches stay close to `main`. Squash merges keep `main`'s history linear and readable — one commit per feature. Conventional commit types make that history meaningful at a glance. git-acta connects all three as a unit: you name your branch `feat/user-auth` once, and every commit message, PR title, and release tag follows from that single decision.
32
+
33
+ ## Opinions
34
+
35
+ git-acta is intentionally opinionated. These constraints are not configurable:
36
+
37
+ - **GitHub only** — PR and release operations rely on `gh`. GitLab and Bitbucket are not supported.
38
+ - **Squash merges** — `ship` always squash-merges to keep `main`'s history linear.
39
+ - **Single trunk** — `main` is the only integration branch. `develop`, `release/*`, and similar long-lived branches are out of scope. The trunk name is not configurable — repositories using a different default branch are not supported.
40
+ - **Conventional commits** — branch names must follow `type/scope` using one of the [11 standard types](https://www.conventionalcommits.org). An optional third segment (`type/scope/topic`) carries a human-readable topic; the commit type and scope are derived from the first two.
41
+
42
+ If your workflow diverges from any of these, git-acta is not the right tool.
43
+
44
+ ## Prerequisites
45
+
46
+ **Local**
47
+
48
+ - Python 3.10+
49
+ - [uv](https://docs.astral.sh/uv/) for installation
50
+ - [GitHub CLI](https://cli.github.com/) (`gh`) 2.0 or later, authenticated to your GitHub account
51
+
52
+ **Repository configuration**
53
+
54
+ git-acta assumes the repository is configured to match its workflow. Without this, the tool still works but its guarantees don't hold — anyone can bypass conventions by using `git` and `gh` directly.
55
+
56
+ Ask your infra or platform team to configure:
57
+
58
+ - **Squash merges only** — disable merge commits and rebase merges so `main` stays linear
59
+ - **Branch protection on `main`** — require pull requests before merging; disallow direct pushes
60
+ - **Required status checks** — require CI to pass before a PR can be merged; this makes `acta ship`'s CI gate structural rather than advisory
61
+
62
+ ## Installation
63
+
64
+ ```sh
65
+ uv tool install git-acta
66
+ ```
67
+
68
+ This installs the `acta` command. All commands below are invoked as `acta <subcommand>`.
69
+
70
+ ## Workflow walkthrough
71
+
72
+ Here is a complete cycle from starting a feature to tagging a release.
73
+
74
+ **1. Create a branch**
75
+
76
+ ```sh
77
+ acta branch feat/user-auth
78
+ ```
79
+
80
+ Fetches the latest `origin/main` and creates `feat/user-auth` from it. The branch name is the only thing you decide upfront — type and scope flow into every subsequent command automatically.
81
+
82
+ **2. Do your work, then commit**
83
+
84
+ ```sh
85
+ acta commit -A "add login form"
86
+ ```
87
+
88
+ Stages all changes and commits with the message `feat(user-auth): add login form`. The type and scope come from the branch name — you only write the description.
89
+
90
+ For commits that need more context, pass the body with `-b` or open your editor with `-e`:
91
+
92
+ ```sh
93
+ acta commit -A "add login form" -b "Supports email and SSO providers."
94
+ # → commits with inline body (useful in scripts and LLM workflows)
95
+
96
+ acta commit -A -e "add login form"
97
+ # → opens $EDITOR for the body, then commits
98
+ ```
99
+
100
+ You can commit as many times as you want. Only the squash commit that lands on `main` is permanent.
101
+
102
+ **3. Open a PR**
103
+
104
+ ```sh
105
+ acta pr "Add login form"
106
+ ```
107
+
108
+ Pushes the branch with upstream tracking set, creates the PR against `main`, prints the URL, then watches CI checks until they complete. You can share the URL while CI is still running.
109
+
110
+ By default no body is added. To add one:
111
+
112
+ ```sh
113
+ acta pr "Add login form" -b "Adds email/password and SSO login.
114
+
115
+ ## Changes
116
+ - Email/password with bcrypt hashing
117
+ - SSO via Google and GitHub
118
+
119
+ Closes #42."
120
+ # inline body
121
+
122
+ acta pr -e "Add login form"
123
+ # opens $EDITOR for the body
124
+ ```
125
+
126
+ **4. Ship it**
127
+
128
+ Once CI is green:
129
+
130
+ ```sh
131
+ acta ship
132
+ ```
133
+
134
+ Shows you the PR title and number, asks for confirmation, then: squash-merges into `main`, deletes the remote branch, switches to local `main`, pulls, and force-deletes the local branch. You end up on a clean, up-to-date `main` in one step.
135
+
136
+ **5. Tag a release**
137
+
138
+ ```sh
139
+ acta release
140
+ ```
141
+
142
+ Detects your versioning scheme from existing tags, computes the next version, shows you the tag, and asks for confirmation before pushing. On a fresh repo with no tags, it prompts you to choose CalVer or SemVer.
143
+
144
+ ## Board workflow
145
+
146
+ The board commands add a lightweight project layer on top of the core workflow using GitHub Milestones and Issues. They are optional, the branch/commit/pr/ship workflow works the same with or without them.
147
+
148
+ **Create a milestone**
149
+
150
+ ```sh
151
+ acta milestone new "Auth System" --scope auth
152
+ # Milestone #1 created.
153
+
154
+ acta milestone new "Auth System" -d "Handles login, registration, and SSO." --scope auth
155
+ # → with inline description
156
+
157
+ acta milestone new "Auth System" --scope auth -e
158
+ # → opens $EDITOR for the description
159
+ ```
160
+
161
+ The `--scope` is used to derive branch names for all issues in this milestone. Every issue started under the milestone will live on a `type/scope/N-title-slug` branch.
162
+
163
+ **Create issues**
164
+
165
+ ```sh
166
+ acta issue new "Add login form" --type feat --milestone 1
167
+ acta issue new "Fix token expiry" --type fix --milestone 1
168
+ acta issue new "Write auth docs" --type docs --milestone 1
169
+ ```
170
+
171
+ A type is required. A milestone is optional at creation time — an issue without one sits in the backlog. Both are required before `issue start` can be used.
172
+
173
+ **Start an issue**
174
+
175
+ ```sh
176
+ acta issue start 1
177
+ # On branch 'feat/auth/1-add-login', active issue is #1.
178
+ #
179
+ # ## Description
180
+ # Login form with magic link.
181
+ ```
182
+
183
+ Creates the branch from the issue's type and the milestone's scope, with a third segment from the issue number and title slug (`feat/auth/1-add-login`), switches to it, records the active issue in local git config, and prints the issue body so you have the description and acceptance criteria in front of you as you begin. From here, the standard commit/PR/ship workflow applies.
184
+
185
+ **PR body gets `Closes #N` automatically**
186
+
187
+ Because `issue start` recorded the active issue, `acta pr` appends `Closes #1` to the PR body without any extra flags. The issue is closed on GitHub when the PR is squash-merged.
188
+
189
+ **Ship closes the milestone when all issues are done**
190
+
191
+ ```sh
192
+ acta ship
193
+ ```
194
+
195
+ Clears the active issue after merging. If the milestone has no remaining open issues, git-acta closes it automatically and prints a confirmation.
196
+
197
+ **Other board commands**
198
+
199
+ ```sh
200
+ acta board # session snapshot: active work + current milestone
201
+ acta milestone list # list open milestones with issue counts
202
+ acta milestone reopen 1 # reopen a closed milestone
203
+ acta issue list # list open issues, grouped by milestone
204
+ acta issue list --milestone 1 # filter to one milestone (flat list)
205
+ acta issue discard 3 # close an issue as not planned
206
+ ```
207
+
208
+ ## Commands
209
+
210
+ ### `branch TYPE/scope`
211
+
212
+ Fetches the latest `origin/main` and creates a new branch from it.
213
+
214
+ ```sh
215
+ acta branch feat/user-auth # → feat/user-auth
216
+ acta branch fix/payment-api # → fix/payment-api
217
+ acta branch chore/deps # → chore/deps
218
+ acta branch feat/user-auth/sso # → feat/user-auth/sso
219
+ ```
220
+
221
+ The branch name is the only decision you make upfront. Every subsequent `commit` and `pr` command reads the type and scope from it — you never repeat yourself.
222
+
223
+ You may add an optional third segment for a human-readable topic — `feat/user-auth/sso`. The type and scope are read from the first two segments (`feat`, `user-auth`); the topic keeps the branch name distinct and descriptive, so two branches sharing a type and scope can coexist.
224
+
225
+ The fetch happens before branch creation, so you always start from the latest `main` regardless of how long ago you last pulled. If the branch already exists locally, git will error — delete it first or choose a different name.
226
+
227
+ ### `commit DESCRIPTION`
228
+
229
+ Creates a conventional commit by reading the type and scope from the current branch name. The commit message header is always `type(scope): description` — you only supply the description.
230
+
231
+ ```sh
232
+ acta commit "add login form"
233
+ # → feat(user-auth): add login form
234
+ ```
235
+
236
+ **Body**
237
+
238
+ By default there is no body — most commits don't need one. There are two ways to add one:
239
+
240
+ ```sh
241
+ # Inline — pass the body with -b. Useful in scripts and LLM-driven workflows.
242
+ acta commit "add login form" -b "Supports email and SSO providers."
243
+
244
+ # Interactive — open $EDITOR. Save and exit to use the body; quit without
245
+ # saving to abort.
246
+ acta commit -e "add login form"
247
+ ```
248
+
249
+ `-b` and `-e` are mutually exclusive. An empty string passed to `-b` is treated the same as no body — only a non-empty string is included in the commit.
250
+
251
+ **Options**
252
+
253
+ | Flag | Description |
254
+ |------|-------------|
255
+ | `-A` / `--stage-all` | Stage all changes (`git add -A`) before committing |
256
+ | `-P` / `--push` | Push to origin after committing (combine as `-AP`) |
257
+ | `-b BODY` / `--body` | Commit body (mutually exclusive with `-e`) |
258
+ | `-e` / `--edit` | Open `$EDITOR` to write the commit body interactively |
259
+ | `-t TYPE` / `--type` | Override the type inferred from the branch name |
260
+ | `-s SCOPE` / `--scope` | Override the scope inferred from the branch name |
261
+
262
+ The `-t` and `-s` overrides are for cases where the commit type or scope differs from the branch — for example, bumping a lockfile on a `feat` branch:
263
+
264
+ ```sh
265
+ acta commit -t chore "update lockfile" # chore(user-auth): update lockfile
266
+ acta commit -s auth-core "fix token TTL" # feat(auth-core): fix token TTL
267
+ ```
268
+
269
+ `-P` pushes after committing, handy for follow-up commits once a PR is already open. It prints a reminder to refresh the PR description, since new commits may change the PR's scope.
270
+
271
+ ### `pr TITLE`
272
+
273
+ Pushes the current branch to origin (with upstream tracking), creates a GitHub PR against `main` with a conventional title derived from the branch name, prints the PR URL, then watches CI checks until they complete.
274
+
275
+ The PR title is constructed the same way as a commit header: `type(scope): title`. You supply only the human-readable title. Pass `--breaking` to mark a breaking change — it appends `!` to give `type(scope)!: title`, the conventional-commits marker. Because `ship` squash-merges the PR title onto `main`, this is where the breaking marker is recorded in history.
276
+
277
+ **Body**
278
+
279
+ By default no body is added. There are two ways to add one:
280
+
281
+ ```sh
282
+ # Inline — pass the body with -b. Useful in scripts and LLM-driven workflows.
283
+ acta pr "Add login form" -b "Adds email/password and SSO login. Closes #42."
284
+
285
+ # Interactive — open $EDITOR. Save and exit to use the body;
286
+ # quit without saving to abort.
287
+ acta pr -e "Add login form"
288
+ ```
289
+
290
+ `-b` and `-e` are mutually exclusive. An empty string passed to `-b` is treated the same as no body.
291
+
292
+ **Options**
293
+
294
+ | Flag | Description |
295
+ |------|-------------|
296
+ | `-b BODY` / `--body` | PR body (mutually exclusive with `-e`) |
297
+ | `-e` / `--edit` | Open `$EDITOR` to write the PR body interactively |
298
+ | `-t TYPE` / `--type` | Override the type in the PR title |
299
+ | `-s SCOPE` / `--scope` | Override the scope in the PR title |
300
+ | `--breaking` | Append `!` to `type(scope)` to mark a breaking change |
301
+
302
+ The PR URL is printed to stdout as soon as the PR is created, before CI checks begin — you can share it while checks are still running. If checks fail, the run ends with a non-zero exit code.
303
+
304
+ If `issue start` was used to begin work on the current branch, `pr` automatically appends `Closes #N` to the PR body so the linked issue is closed when the PR merges.
305
+
306
+ ### `ship`
307
+
308
+ Squash-merges the current branch's PR and brings your local environment back to a clean state on `main`. Must be run from the feature branch, not from `main`.
309
+
310
+ ```sh
311
+ acta ship
312
+ ```
313
+
314
+ Displays the PR title and number, asks for confirmation, then executes in order:
315
+
316
+ 1. Squash-merges the PR into `main`
317
+ 2. Deletes the remote branch
318
+ 3. Switches to local `main`
319
+ 4. Pulls latest from `origin/main`
320
+ 5. Force-deletes the local branch
321
+
322
+ You end up on a clean, up-to-date `main` in one step.
323
+
324
+ If the branch was started with `issue start`, `ship` also clears the active issue from local git config. If the linked issue's milestone has no remaining open issues after the merge, the milestone is closed automatically.
325
+
326
+ **Options**
327
+
328
+ | Flag | Description |
329
+ |------|-------------|
330
+ | `-y` / `--yes` | Skip the confirmation prompt |
331
+ | `-u BRANCH` | After shipping, switch to BRANCH and merge `origin/main` into it |
332
+
333
+ `-u` is for cases where you paused work on one branch to ship a dependency first:
334
+
335
+ ```sh
336
+ # Shipping fix/tech-debt while feat/user-auth is parked
337
+ acta ship -u feat/user-auth
338
+ # → ships fix/tech-debt, then switches to feat/user-auth and merges origin/main
339
+ ```
340
+
341
+ `-y` is useful in automated contexts where you want to ship without interactive confirmation:
342
+
343
+ ```sh
344
+ acta ship -y
345
+ ```
346
+
347
+ ### `watch`
348
+
349
+ Re-attaches to CI checks for the current branch's PR. Useful when you want to check in on CI after navigating away from the terminal during a `pr` run.
350
+
351
+ ```sh
352
+ acta watch
353
+ ```
354
+
355
+ ### `board`
356
+
357
+ Prints a session snapshot: the current branch and active issue, the milestone in focus with its open issues expanded, and the remaining open milestones as one-line counts. The focused milestone is the active issue's milestone, or the first open milestone when no issue is active.
358
+
359
+ ```sh
360
+ acta board
361
+ # Current branch: feat/foundation
362
+ # Active issue: #4 Auth
363
+ #
364
+ # #1 Foundation — 3 issues open, 2 closed
365
+ # #3 chore Full data model — schema and migrations
366
+ # #4 feat Auth — magic link login, session, protected routes
367
+ #
368
+ # #2 Portfolio — 2 issues open
369
+ ```
370
+
371
+ ### `milestone new TITLE`
372
+
373
+ Creates a GitHub Milestone. The `--scope` option is required and determines the branch name prefix used by all issues in this milestone.
374
+
375
+ ```sh
376
+ acta milestone new "Auth System" --scope auth
377
+ acta milestone new "Auth System" -d "Handles login and SSO." --scope auth
378
+ acta milestone new "Auth System" -e --scope auth # opens $EDITOR
379
+ ```
380
+
381
+ **Options**
382
+
383
+ | Flag | Description |
384
+ |------|-------------|
385
+ | `--scope SCOPE` | Branch scope for all issues in this milestone (required) |
386
+ | `-d DESC` / `--description` | Milestone description (mutually exclusive with `-e`) |
387
+ | `-e` / `--edit` | Open `$EDITOR` for the description |
388
+
389
+ ### `milestone list`
390
+
391
+ Lists open milestones with their open/closed issue counts, under a repo header.
392
+
393
+ ```sh
394
+ acta milestone list
395
+ # renov milestones:
396
+ # #1 Foundation — 3 issues open, 2 closed
397
+ # #2 Portfolio — 2 issues open
398
+ ```
399
+
400
+ The closed count is omitted when nothing is closed.
401
+
402
+ ### `milestone reopen NUMBER`
403
+
404
+ Reopens a closed milestone.
405
+
406
+ ```sh
407
+ acta milestone reopen 1
408
+ ```
409
+
410
+ ### `issue new TITLE`
411
+
412
+ Creates a GitHub Issue. `--type` is required. `--milestone` is optional — an issue without one sits in the backlog. Both are required before `issue start` can be used. Type labels are created in the repository automatically on first use.
413
+
414
+ ```sh
415
+ acta issue new "Add login form" --type feat
416
+ acta issue new "Add login form" --type feat --milestone 1
417
+ acta issue new "Add login form" --type feat --milestone 1 -b "Magic-link login."
418
+ acta issue new "Add login form" --type feat --milestone 1 -e
419
+ ```
420
+
421
+ **Options**
422
+
423
+ | Flag | Description |
424
+ |------|-------------|
425
+ | `--type TYPE` | Conventional commit type label (required) |
426
+ | `--milestone NUMBER` | Milestone number |
427
+ | `-b BODY` / `--body` | Issue body (mutually exclusive with `-e`) |
428
+ | `-e` / `--edit` | Open `$EDITOR` for the issue body |
429
+
430
+ ### `issue list`
431
+
432
+ Lists open issues grouped by milestone. With `--milestone`, lists just that milestone's issues as a flat list.
433
+
434
+ ```sh
435
+ acta issue list
436
+ # #1 Foundation
437
+ # #3 chore Full data model — schema and migrations
438
+ # #4 feat Auth — magic link login, session, protected routes
439
+ #
440
+ # #2 Portfolio
441
+ # #6 feat Portfolio
442
+
443
+ acta issue list --milestone 1
444
+ # #3 chore Full data model — schema and migrations
445
+ # #4 feat Auth — magic link login, session, protected routes
446
+ ```
447
+
448
+ Issues with no milestone are grouped last under `No milestone`.
449
+
450
+ ### `issue start NUMBER`
451
+
452
+ Starts work on an issue: creates the branch from the milestone's scope, switches to it, records the active issue in local git config, and prints the issue body. Requires the issue to have a type label and be assigned to a milestone.
453
+
454
+ The branch is `type/scope/N-title-slug` — the issue's type and the milestone's scope, plus a third segment built from the issue number and a slug of its title. This keeps each issue on a distinct, self-describing branch even when several issues in a milestone share the same type and scope.
455
+
456
+ ```sh
457
+ acta issue start 1
458
+ # On branch 'feat/auth/1-add-login', active issue is #1.
459
+ #
460
+ # ## Description
461
+ # Login form with magic link.
462
+ ```
463
+
464
+ The issue body is printed so the description and acceptance criteria are in front of you as you start. The recorded active issue is used by `pr` (to append `Closes #N`) and cleared by `ship` (after merging).
465
+
466
+ ### `issue discard NUMBER`
467
+
468
+ Closes an issue as "not planned".
469
+
470
+ ```sh
471
+ acta issue discard 3
472
+ ```
473
+
474
+ ### `release`
475
+
476
+ Tags the current tip of `origin/main` and pushes the tag. It fetches the latest tags, computes the next version, shows it, and asks for confirmation before pushing. Supports CalVer and SemVer.
477
+
478
+ For SemVer the bump is derived from the conventional-commit subjects since the last tag: a `feat` bumps minor, anything else bumps patch, and once the project is stable (1.0+) a `!` breaking change bumps major. While still 0.x a breaking change is capped at minor, since a pre-1.0 breaking change must not force `v1.0.0`. There is no `--bump`: the commits decide.
479
+
480
+ ```sh
481
+ acta release # derive and tag the next version (auto-detects scheme)
482
+ acta release --scheme semver # force SemVer (only needed for the very first tag)
483
+ acta release --scheme calver # use calendar versioning instead
484
+ acta release --stable # one-time promotion of a 0.x project to v1.0.0
485
+ ```
486
+
487
+ **Going stable.** `v1.0.0` is the one version the commits cannot derive: the 0.x cap stops at minor, because declaring stability is a deliberate decision. Pass `--stable` once to make that jump. After 1.0, breaking changes drive majors automatically, so there is no further override.
488
+
489
+ **Scheme detection.** If the repository already has version tags, git-acta detects the scheme automatically, so `--scheme` is not needed. If no tags exist yet, it prompts you to choose. If both CalVer and SemVer tags are found, it exits with an error; pass `--scheme` explicitly to proceed.
490
+
491
+ **Options**
492
+
493
+ | Flag | Description |
494
+ |------|-------------|
495
+ | `--scheme SCHEME` | Versioning scheme: `calver` or `semver` |
496
+ | `--stable` | Promote a 0.x project to `v1.0.0` (SemVer only, one-time) |
497
+ | `-y` / `--yes` | Skip the confirmation prompt |
498
+
499
+ ## Versioning schemes
500
+
501
+ ### CalVer — `vYYYY.MM.N`
502
+
503
+ Tags are tied to the calendar month, with a sequential counter that resets each month:
504
+
505
+ ```
506
+ v2026.06.1
507
+ v2026.06.2
508
+ v2026.07.1 ← new month, counter resets
509
+ ```
510
+
511
+ Good fit for projects that ship continuously and want version numbers that communicate when something was released.
512
+
513
+ ### SemVer — `vMAJOR.MINOR.PATCH`
514
+
515
+ Standard semantic versioning. The first tag on a repo with no prior tags starts at `v0.1.0`.
516
+
517
+ ```
518
+ v0.1.0 → v0.1.1 (patch)
519
+ v0.1.1 → v0.2.0 (minor)
520
+ v0.2.0 → v1.0.0 (major)
521
+ ```
522
+
523
+ The tag is always placed on `origin/main`, so run `release` after shipping all PRs for the version.
524
+
525
+ ## Branch naming
526
+
527
+ All commands that read from the branch name (`commit`, `pr`) expect the format `type/scope`, with an optional third `topic` segment:
528
+
529
+ ```
530
+ feat/user-auth
531
+ fix/payment-timeout
532
+ chore/upgrade-deps
533
+ docs/api-reference
534
+ feat/user-auth/sso
535
+ ```
536
+
537
+ The type must be one of the standard conventional commit types: `build`, `chore`, `ci`, `docs`, `feat`, `fix`, `perf`, `refactor`, `revert`, `style`, `test`. The scope must start with a letter or digit and may contain letters, digits, hyphens, and underscores — spaces and special characters are not allowed. An optional third segment may follow the scope (`type/scope/topic`) to give the branch a distinct, human-readable name; the type and scope are read from the first two segments. Type and scope are validated by `branch` before the branch is created, and by `commit` and `pr` when reading the current branch name.
538
+
539
+ ## License
540
+
541
+ MIT
@@ -0,0 +1,25 @@
1
+ acta/__init__.py,sha256=yzkgWHVgpvN7ZucRtD7-msGmQfydoMtm2vp-oVb72fc,74
2
+ acta/cli/__init__.py,sha256=5MVetI2jmmmP2UW14F31o0xRG9pZk6ixzdIoCZAGwr4,1028
3
+ acta/cli/board.py,sha256=o_TLTZQiLa3VgnJnsdFk5tm_9JzrF6qx2XZMjz9-9OI,1942
4
+ acta/cli/branch.py,sha256=4N1OygpDhxYMBOpze-IJTOxEkYeZPgaLqCy54z80bP4,479
5
+ acta/cli/commit.py,sha256=R737irBOgIo4uet5wSSsED51YhEzlh1gz4ocpEyc-6U,2076
6
+ acta/cli/issue.py,sha256=lKRXXFJF_YlcNMe6-Pyzbe1uh8ibZa2ImtvxKJqKTks,5564
7
+ acta/cli/milestone.py,sha256=2YMSz9rUn3V2pcq9V-aYcE5DzxnoKzOSyBNEvya3R0w,2211
8
+ acta/cli/pr.py,sha256=4C-onuMjtldzvZjKhFQNHCDd8gVY-gqzxcMVjQTniYY,4811
9
+ acta/cli/release.py,sha256=-l9OPs0WVX_vy6EByK80eqsfJ6VNnXbvB6NA3c0oxbM,2327
10
+ acta/cli/shared.py,sha256=BRO97OI7xenpl4WtCmEO-lwwreoyYdUlkPkdLTmTs-4,1342
11
+ acta/git/__init__.py,sha256=QvGjlKVjMWPccIuzGDKuq7Y_-TNgfF3d0ayt2cYqhXM,978
12
+ acta/git/branch.py,sha256=IbRO0ELwI5hrfFN9-EA7vWzphqt8tM9Kml8hDMXYOrg,1893
13
+ acta/git/commit.py,sha256=r0x_auqGbihzOdzeyAgJ2USCsQDhXDUVRIbgFaYNOFA,463
14
+ acta/git/config.py,sha256=Kuk42gMs3mTQNgM7NwFrmir8qx8GawR3lhLrensLzJY,549
15
+ acta/git/tag.py,sha256=w57PVJnEs7xZgW56TouXHLAmcXx4SzoKDQYrhZxffMg,4267
16
+ acta/github/__init__.py,sha256=80DyP_ozWOvF-WshbGOyK3jzhaaV80lFnM58TFjRPog,1261
17
+ acta/github/issue.py,sha256=8GvmR4jjzqcLAeYL9WZkIvkGpe6QgH2cWXpcSZoIAas,3387
18
+ acta/github/label.py,sha256=PALl4GKA-ABod_VyTYcmeAzjQtVIm-xIt7gyqIaSzCg,562
19
+ acta/github/milestone.py,sha256=m-m3Adnin5IhnuEfck0GHMHqYeUO9-yWy3iSDPBfuSg,3159
20
+ acta/github/pr.py,sha256=KTskBTlH50q4W4RlCbrBDGCE2Ki5MsVWZgcLBC-yk3g,3335
21
+ git_acta-1.0.0.dist-info/METADATA,sha256=wtOiwLwKYRDTfACLLqYCs6kqLFQ6WrDIZFc_UyjevUo,21896
22
+ git_acta-1.0.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
23
+ git_acta-1.0.0.dist-info/entry_points.txt,sha256=KDOaOLfClHxa5OCrfK47XxdSK6YMT9MG51TiJSkfQxw,39
24
+ git_acta-1.0.0.dist-info/licenses/LICENSE,sha256=fXPx6-tt0xoJ3o87wko0BcBptkIprKNhzwrZTek3_7c,1074
25
+ git_acta-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ acta = acta.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nicolas Contreras
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.