@idea1/cli 1.8.2 → 1.9.0
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.
- package/README.md +205 -69
- package/dist/cli/resolver.d.ts +1 -0
- package/dist/cli/resolver.d.ts.map +1 -1
- package/dist/cli/resolver.js +5 -0
- package/dist/cli/resolver.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/approve-pr.d.ts.map +1 -1
- package/dist/commands/approve-pr.js +24 -41
- package/dist/commands/approve-pr.js.map +1 -1
- package/dist/commands/attach-project-item.d.ts.map +1 -1
- package/dist/commands/attach-project-item.js +27 -7
- package/dist/commands/attach-project-item.js.map +1 -1
- package/dist/commands/close-worktree.d.ts.map +1 -1
- package/dist/commands/close-worktree.js +4 -3
- package/dist/commands/close-worktree.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +17 -11
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/integrate.d.ts +13 -0
- package/dist/commands/integrate.d.ts.map +1 -0
- package/dist/commands/integrate.js +128 -0
- package/dist/commands/integrate.js.map +1 -0
- package/dist/commands/join-project-item.d.ts.map +1 -1
- package/dist/commands/join-project-item.js +22 -48
- package/dist/commands/join-project-item.js.map +1 -1
- package/dist/commands/next-workflow-step.d.ts.map +1 -1
- package/dist/commands/next-workflow-step.js +20 -21
- package/dist/commands/next-workflow-step.js.map +1 -1
- package/dist/commands/ready-for-approval.d.ts.map +1 -1
- package/dist/commands/ready-for-approval.js +27 -19
- package/dist/commands/ready-for-approval.js.map +1 -1
- package/dist/commands/release.d.ts +6 -0
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +189 -25
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/ship-local-changes.d.ts +8 -0
- package/dist/commands/ship-local-changes.d.ts.map +1 -0
- package/dist/commands/ship-local-changes.js +34 -0
- package/dist/commands/ship-local-changes.js.map +1 -0
- package/dist/commands/start-agent-implementation.js +2 -2
- package/dist/commands/start-agent-implementation.js.map +1 -1
- package/dist/commands/start-dev-implementation.d.ts.map +1 -1
- package/dist/commands/start-dev-implementation.js +8 -3
- package/dist/commands/start-dev-implementation.js.map +1 -1
- package/dist/commands/start-project-item.d.ts +27 -0
- package/dist/commands/start-project-item.d.ts.map +1 -0
- package/dist/commands/start-project-item.js +325 -0
- package/dist/commands/start-project-item.js.map +1 -0
- package/dist/commands/start.d.ts +8 -2
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +76 -35
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +164 -0
- package/dist/interactive.js.map +1 -1
- package/dist/jobs/job.d.ts +81 -0
- package/dist/jobs/job.d.ts.map +1 -0
- package/dist/jobs/job.js +258 -0
- package/dist/jobs/job.js.map +1 -0
- package/dist/jobs/targets.d.ts +58 -0
- package/dist/jobs/targets.d.ts.map +1 -0
- package/dist/jobs/targets.js +215 -0
- package/dist/jobs/targets.js.map +1 -0
- package/dist/lib/claude-options.d.ts +3 -2
- package/dist/lib/claude-options.d.ts.map +1 -1
- package/dist/lib/claude-options.js +15 -4
- package/dist/lib/claude-options.js.map +1 -1
- package/dist/lib/logger.d.ts +10 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +16 -0
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/prompt.d.ts +7 -0
- package/dist/lib/prompt.d.ts.map +1 -1
- package/dist/lib/prompt.js +29 -0
- package/dist/lib/prompt.js.map +1 -1
- package/dist/lib/settings.d.ts +13 -3
- package/dist/lib/settings.d.ts.map +1 -1
- package/dist/lib/settings.js +12 -3
- package/dist/lib/settings.js.map +1 -1
- package/dist/lib/shell.d.ts +2 -1
- package/dist/lib/shell.d.ts.map +1 -1
- package/dist/lib/shell.js +17 -1
- package/dist/lib/shell.js.map +1 -1
- package/dist/services/git.d.ts +41 -13
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +85 -46
- package/dist/services/git.js.map +1 -1
- package/dist/services/github.d.ts +28 -0
- package/dist/services/github.d.ts.map +1 -1
- package/dist/services/github.js +82 -3
- package/dist/services/github.js.map +1 -1
- package/dist/services/setup.d.ts +4 -2
- package/dist/services/setup.d.ts.map +1 -1
- package/dist/services/setup.js +61 -37
- package/dist/services/setup.js.map +1 -1
- package/dist/services/workflow.d.ts +17 -0
- package/dist/services/workflow.d.ts.map +1 -0
- package/dist/services/workflow.js +39 -0
- package/dist/services/workflow.js.map +1 -0
- package/dist/services/worktree.js +1 -1
- package/dist/services/worktree.js.map +1 -1
- package/dist/types/index.d.ts +25 -24
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +2 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -2
- package/dist/version.js.map +1 -1
- package/dist/workflow/engine/approval-flow.d.ts +10 -2
- package/dist/workflow/engine/approval-flow.d.ts.map +1 -1
- package/dist/workflow/engine/approval-flow.js +58 -9
- package/dist/workflow/engine/approval-flow.js.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.js +4 -11
- package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -1
- package/dist/workflow/engine/handlers/approve-pr.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/approve-pr.js +9 -3
- package/dist/workflow/engine/handlers/approve-pr.js.map +1 -1
- package/dist/workflow/engine/handlers/dev-implementation.d.ts +2 -2
- package/dist/workflow/engine/handlers/dev-implementation.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/dev-implementation.js +13 -7
- package/dist/workflow/engine/handlers/dev-implementation.js.map +1 -1
- package/dist/workflow/engine/handlers/ready-for-approval.d.ts +5 -0
- package/dist/workflow/engine/handlers/ready-for-approval.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/ready-for-approval.js +11 -7
- package/dist/workflow/engine/handlers/ready-for-approval.js.map +1 -1
- package/dist/workflow/engine/{release-flow.d.ts → release-engine.d.ts} +83 -6
- package/dist/workflow/engine/release-engine.d.ts.map +1 -0
- package/dist/workflow/engine/{release-flow.js → release-engine.js} +291 -19
- package/dist/workflow/engine/release-engine.js.map +1 -0
- package/dist/workflow/engine/ship-flow.d.ts +87 -0
- package/dist/workflow/engine/ship-flow.d.ts.map +1 -0
- package/dist/workflow/engine/ship-flow.js +221 -0
- package/dist/workflow/engine/ship-flow.js.map +1 -0
- package/dist/workflow/engine/workflow-engine.d.ts +85 -15
- package/dist/workflow/engine/workflow-engine.d.ts.map +1 -1
- package/dist/workflow/engine/workflow-engine.js +195 -66
- package/dist/workflow/engine/workflow-engine.js.map +1 -1
- package/package.json +3 -3
- package/dist/workflow/engine/release-flow.d.ts.map +0 -1
- package/dist/workflow/engine/release-flow.js.map +0 -1
package/README.md
CHANGED
|
@@ -16,13 +16,16 @@ Run commands directly from the command line:
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
# Put a project item under workflow management (branch recorded on idea1.ai, no code changes)
|
|
19
|
-
idea1 start --
|
|
19
|
+
idea1 start --target https://app.idea1.ai/project/items/590
|
|
20
|
+
|
|
21
|
+
# Ship the uncommitted changes of your working/release checkout: new item, its branch, PR, checks, merge
|
|
22
|
+
idea1 ship --title "Release prep" --project "Omega"
|
|
20
23
|
|
|
21
24
|
# Advance the item to its next workflow state (runs that state's automation)
|
|
22
|
-
idea1 next --
|
|
25
|
+
idea1 next --target https://app.idea1.ai/project/items/590 # or just `idea1 next` on the item's branch
|
|
23
26
|
|
|
24
27
|
# Jump straight to Agent Implementation (worktree + Claude) — the "send for implementation" path
|
|
25
|
-
idea1 start-agent-implementation --
|
|
28
|
+
idea1 start-agent-implementation --target https://app.idea1.ai/project/items/590 # alias: start-project-item
|
|
26
29
|
|
|
27
30
|
# Dedicated transitions (each is one `next` step)
|
|
28
31
|
idea1 start-dev-implementation # or: idea1 dev
|
|
@@ -32,10 +35,15 @@ idea1 approve-pr # or: idea1 approve
|
|
|
32
35
|
# The same two commands on a branch with no project item, e.g. an integration branch:
|
|
33
36
|
# open its PR into working/release and name the approver, then (as the approver) merge it
|
|
34
37
|
idea1 ready-for-approval --assignee octocat
|
|
35
|
-
idea1 approve-pr --
|
|
38
|
+
idea1 approve-pr --target working/integration/<name>-main
|
|
39
|
+
|
|
40
|
+
# From working/release: approve several items, branches or PRs at once, each in its own unattended run, in parallel
|
|
41
|
+
idea1 approve-pr --target https://app.idea1.ai/project/items/590,working/agent/fix-config,https://github.com/org/repo/pull/912
|
|
36
42
|
|
|
37
|
-
# Release the release branch to production (opens the release PR into main
|
|
43
|
+
# Release the release branch to production (bumps changed packages' versions, opens the release PR into main assigned to you, and merges it once the checks pass)
|
|
38
44
|
idea1 release # or: idea1 r
|
|
45
|
+
idea1 release --approve # approve and merge the release PR that is already open
|
|
46
|
+
idea1 release --target <item url>,<branch> # approve these into working/release first, then release once all have merged
|
|
39
47
|
|
|
40
48
|
# Show help
|
|
41
49
|
idea1 --help
|
|
@@ -43,7 +51,40 @@ idea1 --help
|
|
|
43
51
|
|
|
44
52
|
### Interactive Mode
|
|
45
53
|
|
|
46
|
-
Run `idea1` without arguments to enter interactive mode with a searchable command interface.
|
|
54
|
+
Run `idea1` without arguments to enter interactive mode with a searchable command interface. A command run on several targets runs there as a background job: the prompt comes back at once, a notice is printed when the job finishes, and `/jobs` lists the session's jobs and opens a live view of one (Esc returns to the prompt). Leaving with `/exit` while a job runs asks whether to stop it. Whatever a command does, the session stays in the directory it started in.
|
|
55
|
+
|
|
56
|
+
## Targets and parallel runs
|
|
57
|
+
|
|
58
|
+
Every command that works on a project item or a branch names it with `--target`, which takes any of:
|
|
59
|
+
|
|
60
|
+
- a project item URL (`https://app.idea1.ai/project/items/590`)
|
|
61
|
+
- a branch name (`working/agent/fix-config`)
|
|
62
|
+
- a GitHub PR URL (`https://github.com/org/repo/pull/912`), which stands for its head branch
|
|
63
|
+
|
|
64
|
+
A branch, or a PR's branch, resolves to the project item it implements. A command that needs a project item (`next`, `start-dev-implementation`, `start`, `start-agent-implementation`, `attach-project-item`, `ship-local-changes`, `join-project-item` for an item) refuses a branch that is no item's. `ready-for-approval` and `approve-pr` also operate on a branch with no project item.
|
|
65
|
+
|
|
66
|
+
With no `--target`, a command works on the current branch when it can be the target: an item's branch, or for `ready-for-approval` and `approve-pr` any branch other than the base branch. Otherwise, as on `working/release`, the targets are the first thing it asks for. It shows a picker of the open PRs into the base branch and the branches your clone knows as project items' (worktrees included). Pick any number with space, and pick **Other** to type item URLs, branch names or PR URLs as well. `release` asks the same way; picking nothing releases the branch as it is.
|
|
67
|
+
|
|
68
|
+
**One target** runs exactly as the command always has, in your terminal. Its work happens in the branch's local checkout when it has one. A branch with no checkout is worked on through origin and GitHub, and is checked out only when a step needs its files: entering Agent Implementation creates it, per the isolation mode. Approving or readying an item's PR from `working/release` therefore checks nothing out at all, and the merge brings your `working/release` checkout up to date.
|
|
69
|
+
|
|
70
|
+
**Several targets** (comma-separated) run as a job, one unattended CLI process per target, in parallel:
|
|
71
|
+
|
|
72
|
+
- Before anything starts, every target is resolved. Anything that would stop one (an item with no live branch here, a branch that is no item's for a command that needs one, two targets on one branch) stops the whole command.
|
|
73
|
+
- Everything the runs will need is asked once, up front: the options of every workflow state the items will enter, then one confirmation of the set (`--yes` skips it).
|
|
74
|
+
- Runs work in worktrees, never in your checkout, and launch no Claude session.
|
|
75
|
+
- Each run fails fast on its own: a PR that conflicts with its base fails before its checks are waited for, and a failed check ends the wait. The other runs carry on.
|
|
76
|
+
- Every run's output is logged in your main clone under `.idea1/jobs/`, one folder per job. Git ignores the folder through `.idea1/.gitignore`. On every run, the CLI creates that file if it is missing and adds any entry it lacks; commit the change when it does. Logs older than 14 days, and beyond the 50 most recent jobs, are deleted as new jobs start.
|
|
77
|
+
- Outside interactive mode the job runs in the foreground: each run's steps are reported as they happen, then a summary. The exit code is non-zero when any run failed.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
idea1 approve-pr --target <item url>,<branch>,<PR url> --yes
|
|
81
|
+
idea1 ready-for-approval --target <item url>,<item url> --assignee octocat
|
|
82
|
+
idea1 next --to "Dev Implementation" --target <item url>,<item url>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
An unattended run asks nothing. A text question with a default (a PR title, say) takes the default. Every other question, such as a confirmation or a choice, fails the run at once with the question it needed answered.
|
|
86
|
+
|
|
87
|
+
Several CLIs can also run side by side in one clone, from separate terminals. Their git commands wait for each other's locks rather than failing.
|
|
47
88
|
|
|
48
89
|
## Commands
|
|
49
90
|
|
|
@@ -69,13 +110,13 @@ A transition is "enter state X". Entering a state runs that state's automation (
|
|
|
69
110
|
| Entering | Automation |
|
|
70
111
|
|----------|-----------|
|
|
71
112
|
| Build Spec in Progress … Ready for Agent Implementation | none — status only |
|
|
72
|
-
| **Agent Implementation** | ensures the branch is checked out locally (worktree or main repo)
|
|
73
|
-
| **Dev Implementation** | commits and pushes the agent's work, creates the PR, removes the worktree if `removeWorktreeAtState` says so |
|
|
113
|
+
| **Agent Implementation** | ensures the branch is checked out locally (worktree or main repo) — the one step that creates a checkout when the branch has none — then **launches Claude** to implement the item. This is the only transition that starts code-writing automation |
|
|
114
|
+
| **Dev Implementation** | commits and pushes the agent's work from the branch's checkout (a branch with no checkout here has its work on origin), creates the PR, removes the worktree if `removeWorktreeAtState` says so |
|
|
74
115
|
| **Needs Approval for Release** | requires the PR, sets its assignee (required — the approver of record) and any requested reviewers, removes a legacy workflow context file if the branch still carries one (its final commit), and removes the worktree if configured. From here on the branch stays as it is |
|
|
75
|
-
| **Approved and Merged** | verifies you are the assignee, waits for the CI/CD suite, merges the PR as it stands — the merge is the approval — then deletes the branch and worktree |
|
|
116
|
+
| **Approved and Merged** | verifies you are the assignee, refuses a PR that conflicts with its base, waits for the CI/CD suite, merges the PR as it stands — the merge is the approval — then deletes the branch and worktree and fast-forwards your base branch checkout |
|
|
76
117
|
| Released | none — normally set by GitHub automation when the work merges to `main` |
|
|
77
118
|
|
|
78
|
-
`start` begins state management, `next` advances one state,
|
|
119
|
+
`start` begins state management, `next` advances one state, `start-agent-implementation` jumps to Agent Implementation, and `ship-local-changes` takes uncommitted base-branch work all the way to Approved and Merged — all three reduce to the same engine, so branches and items always end up consistent with the state they are in. The engine and its layers are described in `src/workflow/README.md`.
|
|
79
120
|
|
|
80
121
|
### Who approves what
|
|
81
122
|
|
|
@@ -85,7 +126,7 @@ A change reaches production through two merges, and **each merge is its approval
|
|
|
85
126
|
|
|
86
127
|
**Any other branch into `working/release`** — a branch with no project item takes the same gate. `idea1 ready-for-approval` opens its PR (with the approval chain of what the branch carries as the body) and names its assignee; `idea1 approve-pr` merges it once the suite passes, with the same no-override rule, and then deletes the branch. Only the idea1.ai status writes are absent. Integration branches work this way: work items PR into `working/integration/<name>-main` and are approved there exactly as above, then the integration branch itself is carried into `working/release` with these two commands — its PR body lists every work-item PR and who approved it, and `approve-pr` refuses while any PR still targets the integration branch.
|
|
87
128
|
|
|
88
|
-
**Into `main`** — `idea1 release` opens the release PR **assigned to whoever ran it**: the releaser is the approver, and their merge is the recorded approval. No review is required — every change in the release was already approved above, and the release PR body lists each contained PR with who approved it. What this stage gates is the build: the required CI/CD checks must pass first. In the default `create` mode the releaser merges the PR in GitHub once the checks are green; in `merge` mode the CLI waits for
|
|
129
|
+
**Into `main`** — `idea1 release` opens the release PR **assigned to whoever ran it**: the releaser is the approver, and their merge is the recorded approval. No review is required — every change in the release was already approved above, and the release PR body lists each contained PR with who approved it. What this stage gates is the build: the required CI/CD checks must pass first. In the default `create` mode the releaser merges the PR in GitHub once the checks are green; in `merge` mode (and with `idea1 release --approve`) the CLI turns on GitHub's auto-merge as the releaser, so GitHub merges once the checks pass and records the releaser as `merged_by`, or waits for the checks with `gh` and merges here where GitHub can't auto-merge. A release approved in the Idea1 web app is merged by the Idea1 GitHub App instead; the app first posts an approval comment naming the releaser, who is the PR's assignee, and that comment is the approval of record. An emergency admin override past a red check needs an explicit confirmation and a stated reason, and is recorded as a comment on the PR before the merge.
|
|
89
130
|
|
|
90
131
|
This is the change-management control DataFabrIQ is audited on; see `infrastructure/soc2/policies/change-management-policy.md` clause 2.
|
|
91
132
|
|
|
@@ -94,35 +135,71 @@ This is the change-management control DataFabrIQ is audited on; see `infrastruct
|
|
|
94
135
|
Put a project item under workflow management. An item yet to be started enters **Build Spec in Progress**; an item that already has a state keeps it. The branch is created on origin at the base branch's tip and recorded in the item's workflow context on idea1.ai; the working tree and the code stay as they are, and Claude stays closed. Idempotent: running it again for a managed item just reports the branch and state.
|
|
95
136
|
|
|
96
137
|
```bash
|
|
97
|
-
idea1 start --
|
|
98
|
-
idea1 start # prompts for the
|
|
99
|
-
idea1 s --
|
|
138
|
+
idea1 start --target <url> [options]
|
|
139
|
+
idea1 start # prompts for the target (blank to create a new item)
|
|
140
|
+
idea1 s --target <url>
|
|
100
141
|
```
|
|
101
142
|
|
|
102
143
|
**Options:**
|
|
103
|
-
-
|
|
104
|
-
- `-t, --title <title>` - Title for the new project item (only when no
|
|
105
|
-
- `-P, --project <name>` - The Project to create the new item in, chosen from the team's live Projects (only when no
|
|
144
|
+
- `--target <url | branch | PR url>` - The project item, or its branch or that branch's PR. Leave blank to create a new item (you'll be prompted for a `--title` and a `--project`). One target only.
|
|
145
|
+
- `-t, --title <title>` - Title for the new project item (only when no target is given).
|
|
146
|
+
- `-P, --project <name>` - The Project to create the new item in, chosen from the team's live Projects (only when no target is given; always asked, never defaulted).
|
|
106
147
|
- `-p, --source-path <path>` - Path to source directory.
|
|
107
148
|
- `-n, --branch-name <name>` - Branch name (auto-generated from the item description if not provided).
|
|
108
149
|
- `-b, --base-branch <branch>` - Base branch / PR target (default: `working/release`).
|
|
109
|
-
- `-w, --workflow-type <type>` - `independent` or `integration`; you also choose any stack branch and (for integration) the integration branch.
|
|
150
|
+
- `-w, --workflow-type <type>` - `independent` or `integration`; you also choose any stack branch and (for integration) the integration branch. Not asked when carrying local changes, which go onto an independent branch.
|
|
151
|
+
- `-c, --carry-local-changes` - Make the uncommitted changes of your base branch checkout the item's work. See [Carrying local changes](#carrying-local-changes).
|
|
152
|
+
- `--approve-and-merge` - Advance the item through every state up to **Approved and Merged** without prompting. See [Carrying local changes](#carrying-local-changes).
|
|
153
|
+
- `-M, --commit-message <message>` - Commit message for carried changes (default: the new item's title).
|
|
154
|
+
- `-iso, --isolation <mode>` - Where to work on the branch, when changes are carried or the item is approved and merged. See [Isolation mode](#isolation-mode).
|
|
155
|
+
- `-r, --reviewers <user1,user2>` - Reviewers to request on the PR with `--approve-and-merge` (never asked; optional).
|
|
156
|
+
|
|
157
|
+
### Carrying local changes
|
|
158
|
+
|
|
159
|
+
Work sometimes starts before its project item does: you make changes in your `working/release` checkout, then want them to go through the workflow like any other work. `start --carry-local-changes` (or `attach-project-item --carry-local-changes`) makes them the item's work instead of committing them on the base branch:
|
|
160
|
+
|
|
161
|
+
1. Before anything is created, it checks that the checkout is on the branch the item's branch is cut from (`--base-branch`, else `baseBranch`) and that this branch has no commits origin lacks — only uncommitted changes are carried.
|
|
162
|
+
2. Every uncommitted change — staged or not, plus untracked files that are not ignored — is committed on top of the checkout's commit without touching the checkout, and that commit becomes the tip of the item's branch on origin. For an item with no branch, the branch is created at that commit and recorded as the item's; an item whose branch exists takes the changes only while that branch has no commits of its own and no local checkout. The base branch itself is never committed to or pushed.
|
|
163
|
+
3. The branch is checked out per the isolation mode: with `main-repo`, the checkout that held the changes switches to the branch with its working tree untouched (it is the branch's tip, so the checkout is clean); with `worktree`, the branch gets a worktree and the carried changes are removed from the base branch checkout.
|
|
164
|
+
|
|
165
|
+
With `--approve-and-merge`, the item is then advanced through every workflow state up to **Approved and Merged** with nothing asked on the way: no Claude session is launched at Agent Implementation, the PR is created and assigned to **you** (the person who merges is the approver of record), the CLI waits for the required CI/CD checks — the same no-override gate as `approve-pr` — and merges, then brings your local base branch up to date with the merge. On a new item it needs changes to carry. A run that stops (failing checks, say) leaves the item at the last state it reached; fix the branch and run `idea1 approve-pr`, or run the command again with `--target`, to continue.
|
|
166
|
+
|
|
167
|
+
### ship-local-changes
|
|
168
|
+
|
|
169
|
+
`start --carry-local-changes --approve-and-merge` as one unattended command: create a project item, cut its branch from `working/release`, commit and push your uncommitted changes there, advance it to Needs Approval for Release with a PR assigned to you, wait for the PR's checks and merge it into `working/release`. You end on `working/release`, clean, with your changes merged. The only questions are the ones a new item needs (its title and Project) when they are not supplied.
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
idea1 ship-local-changes --title "Release prep" --project "Omega"
|
|
173
|
+
idea1 ship --title "Release prep" --project "Omega" --branch-name release-prep
|
|
174
|
+
idea1 ship --title "Release prep" --project "Omega" --isolation main-repo
|
|
175
|
+
idea1 ship --target <url> # an existing item whose branch has no commits yet
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Options:**
|
|
179
|
+
- `--target <url | branch | PR url>` - An existing project item (default: create a new one).
|
|
180
|
+
- `-t, --title <title>`, `-P, --project <name>` - The new item's title and Project (asked when missing and no target is given).
|
|
181
|
+
- `-n, --branch-name <name>` - Branch name under the branch prefix (default: derived from the item).
|
|
182
|
+
- `-b, --base-branch <branch>` - The branch your checkout is on, which the item's branch is cut from and merges into (default: `baseBranch`).
|
|
183
|
+
- `-M, --commit-message <message>` - Commit message (default: the item's title).
|
|
184
|
+
- `-iso, --isolation <mode>` - `worktree` (default, never asked) works on the branch in a worktree while it is shipped and leaves your checkout on `working/release`; `main-repo` switches your checkout to the branch until the merge, then back.
|
|
185
|
+
- `-r, --reviewers <user1,user2>` - Reviewers to request on the PR (optional).
|
|
110
186
|
|
|
111
187
|
### next-workflow-step
|
|
112
188
|
|
|
113
|
-
Advance a project item to its next workflow state and run that state's automation. On the item's branch no arguments are needed; from anywhere else pass the item URL — the CLI finds the branch on origin (moving into its local checkout when one exists) or, for an item without a branch yet, reads the current state from idea1.ai and creates the branch first.
|
|
189
|
+
Advance a project item to its next workflow state and run that state's automation. On the item's branch no arguments are needed; from anywhere else pass the item (its URL, branch or PR URL) as `--target` — the CLI finds the branch on origin (moving into its local checkout when one exists) or, for an item without a branch yet, reads the current state from idea1.ai and creates the branch first. Several targets advance in parallel (see [Targets and parallel runs](#targets-and-parallel-runs)), each to its own next state or all to `--to`.
|
|
114
190
|
|
|
115
191
|
With `--to <state>` the item advances through every state up to that one in a single run — the same as running `next` once per state: each state's automation runs and the state is recorded on idea1.ai before the next state is entered. A run that stops part way leaves the item at the last state it entered, and running it again continues from there. The CLI only moves forward; an item already at or past the requested state is left as it is.
|
|
116
192
|
|
|
117
193
|
```bash
|
|
118
194
|
idea1 next # on the item's branch
|
|
119
|
-
idea1 next --
|
|
195
|
+
idea1 next --target <url> # from anywhere in the repository
|
|
120
196
|
idea1 next --to "Dev Implementation" # several states at once
|
|
197
|
+
idea1 next --to "Needs Approval for Release" --target <url>,<url> --assignee octocat # several items in parallel
|
|
121
198
|
idea1 n
|
|
122
199
|
```
|
|
123
200
|
|
|
124
201
|
**Options:**
|
|
125
|
-
-
|
|
202
|
+
- `--target <url | branch | PR url>[,...]` - The project item(s) (default: the current branch, when it is an item's).
|
|
126
203
|
- `--to <state>` - Workflow state to advance to (default: the next state).
|
|
127
204
|
- `-p, --source-path <path>` - Path to source directory.
|
|
128
205
|
- Any option of the state being entered (for example `--model`/`--effort` for Agent Implementation, `--assignee`/`--reviewers` for Needs Approval for Release). Options that were not supplied are prompted for when that state is reached.
|
|
@@ -140,10 +217,10 @@ The automation is idempotent, so re-running a transition after the item was move
|
|
|
140
217
|
Start implementing a project item: put it under workflow management if needed, move it to **Agent Implementation** (through any intermediate states, which have no automation), set up the working environment and launch Claude Code with the implementation prompt — the repository's `prompts.agentImplementation` setting (see [Prompts](#prompts)), the built-in default, or a prompt you supply with `--entry-point-prompt`. This is the command behind "Send for Implementation" in the web client; `start-project-item` remains an alias so existing team command templates keep working.
|
|
141
218
|
|
|
142
219
|
```bash
|
|
143
|
-
idea1 start-agent-implementation --
|
|
144
|
-
idea1 implement --
|
|
145
|
-
idea1 start-project-item --
|
|
146
|
-
idea1 implement --
|
|
220
|
+
idea1 start-agent-implementation --target <url> [options]
|
|
221
|
+
idea1 implement --target <url>
|
|
222
|
+
idea1 start-project-item --target <url> # alias
|
|
223
|
+
idea1 implement --target <url> --entry-point-prompt "Read the spec in docs/spec.md and implement step 3"
|
|
147
224
|
```
|
|
148
225
|
|
|
149
226
|
**Options:** all `start` options, plus the Agent Implementation options:
|
|
@@ -155,11 +232,11 @@ idea1 implement --url <url> --entry-point-prompt "Read the spec in docs/spec.md
|
|
|
155
232
|
- `-udp, --use-default-prompt <yes|no>` - Whether to launch Claude with the repository's implementation prompt, or the built-in one when the repository sets none (default: `yes`). Answering `no` asks for the prompt to use instead.
|
|
156
233
|
- `-epp, --entry-point-prompt <prompt>` - The prompt to launch Claude with, replacing the implementation prompt. Supplying it skips the "Use default prompt?" question. It is a Handlebars template like the repository's prompt, so it can use the same [variables](#prompts).
|
|
157
234
|
|
|
158
|
-
An item already in Agent Implementation is not transitioned again: the working environment is set up (or reused) and Claude is launched.
|
|
235
|
+
An item already in Agent Implementation is not transitioned again: the working environment is set up (or reused) and Claude is launched. With `--claude-entry-point none` the session options (permission mode, model, effort, prompt) are not asked.
|
|
159
236
|
|
|
160
237
|
### Isolation mode
|
|
161
238
|
|
|
162
|
-
`start-agent-implementation`, `next` (when entering Agent Implementation) and `
|
|
239
|
+
`start-agent-implementation`, `next` (when entering Agent Implementation), `join-project-item`, and `start`/`attach-project-item` when carrying local changes or approving and merging all ask where you want to work on the branch. The prompt is always shown, with `worktree` preselected (`ship-local-changes` uses `worktree` without asking):
|
|
163
240
|
|
|
164
241
|
- `worktree` (default) - creates/uses a git worktree in a sibling directory (`<repo>-<branch>`), leaving the main repository on its own branch. Runs the `setup-worktree` hook.
|
|
165
242
|
- `main-repo` - checks the branch out in the main repository, in place. Requires a clean working directory and fails if the branch is already checked out in a worktree. The `setup-worktree` hook is skipped, since the main repository is already set up.
|
|
@@ -171,16 +248,14 @@ Supply `-iso worktree` or `-iso main-repo` on the command line to skip the promp
|
|
|
171
248
|
Join an **in-progress** project item by setting up a working environment on its existing branch — for picking up work started elsewhere (e.g. on another machine, by another developer, or from the web client). It does not change the workflow state and never launches a Claude implementation session.
|
|
172
249
|
|
|
173
250
|
```bash
|
|
174
|
-
idea1 join-project-item --
|
|
175
|
-
idea1 join-project-item --
|
|
176
|
-
idea1 join-project-item --
|
|
177
|
-
idea1 j --
|
|
251
|
+
idea1 join-project-item --target <url>
|
|
252
|
+
idea1 join-project-item --target <branch>
|
|
253
|
+
idea1 join-project-item --target <pr url>
|
|
254
|
+
idea1 j --target <branch>
|
|
178
255
|
```
|
|
179
256
|
|
|
180
|
-
**Options
|
|
181
|
-
- `--
|
|
182
|
-
- `-n, --branch-name <branch>` - The branch to join; its associated project item is discovered automatically.
|
|
183
|
-
- `--pull-request-url <url>` - A GitHub PR URL; its head branch is joined.
|
|
257
|
+
**Options:**
|
|
258
|
+
- `--target <url | branch | PR url>` - **Required.** The project item (its branch is discovered automatically), the branch to join (its project item is discovered automatically), or a GitHub PR (its head branch is joined). One target only.
|
|
184
259
|
- `-p, --source-path <path>` - Path to source directory.
|
|
185
260
|
- `-iso, --isolation <mode>` - Where to work on the branch (default: `worktree`). See [Isolation mode](#isolation-mode).
|
|
186
261
|
|
|
@@ -196,62 +271,69 @@ If a project item URL is supplied but no branch exists for it yet, `join-project
|
|
|
196
271
|
|
|
197
272
|
Attach the **current branch** to a project item, putting it under workflow management at the item's current state (or `Build Spec in Progress` when it has none). Use this when you already have a branch with work on it and want to bring it into the workflow. It does not create a branch or a worktree and never invokes Claude.
|
|
198
273
|
|
|
274
|
+
On the base branch, `--carry-local-changes` gives the item a branch of its own instead and carries your uncommitted changes onto it, exactly as `start --carry-local-changes` does (see [Carrying local changes](#carrying-local-changes)); `--branch-name`, `--commit-message` and `--isolation` then apply. With `--approve-and-merge`, the attached (or new) branch is advanced through every state up to Approved and Merged without prompting.
|
|
275
|
+
|
|
199
276
|
```bash
|
|
200
|
-
idea1 attach-project-item --
|
|
201
|
-
idea1 attach-project-item # prompts for the
|
|
202
|
-
idea1 a --
|
|
277
|
+
idea1 attach-project-item --target <url>
|
|
278
|
+
idea1 attach-project-item # prompts for the target (blank to create a new item)
|
|
279
|
+
idea1 a --target <url>
|
|
203
280
|
```
|
|
204
281
|
|
|
205
282
|
**Options:**
|
|
206
|
-
-
|
|
207
|
-
- `-t, --title <title>` - Title for the new project item (only when no
|
|
283
|
+
- `--target <url | branch | PR url>` - The project item, or its branch or that branch's PR. Leave blank to create a new item (you'll be prompted for a `--title`).
|
|
284
|
+
- `-t, --title <title>` - Title for the new project item (only when no target is given).
|
|
208
285
|
- `-p, --source-path <path>` - Path to source directory.
|
|
209
286
|
- `-b, --base-branch <branch>` - Base branch / PR target for an independent feature (default: `working/release`).
|
|
210
287
|
- `-w, --workflow-type <type>` - Development workflow type: `independent` or `integration`. You also choose any stack branch and (for integration) the integration branch.
|
|
288
|
+
- `-c, --carry-local-changes`, `--approve-and-merge`, `-n, --branch-name`, `-M, --commit-message`, `-iso, --isolation`, `-r, --reviewers` - As for `start`.
|
|
211
289
|
|
|
212
290
|
**What it does:**
|
|
213
291
|
1. Verifies the current branch is free to implement the item (a branch that already implements one is resumed with `join-project-item`).
|
|
214
|
-
2. Creates the project item if no
|
|
292
|
+
2. Creates the project item if no target was supplied.
|
|
215
293
|
3. Records the branch in the item's workflow context on idea1.ai (base branch, dev workflow type, stack/integration branch) in a single call, which puts an item outside workflow management under it at `Build Spec in Progress` and leaves an item that already has a state at that state. The branch is pushed to origin beforehand and stays as it is.
|
|
216
294
|
4. If the item is already at `Dev Implementation` or later, makes sure a PR into the base branch exists.
|
|
217
295
|
|
|
218
296
|
### start-dev-implementation
|
|
219
297
|
|
|
220
|
-
Advance the item to **Dev Implementation** — the same as `next --to "Dev Implementation"`. From Agent Implementation that is one step; from an earlier state every state in between is entered first, each with its own automation. An item already at or past Dev Implementation is left as it is.
|
|
298
|
+
Advance the item to **Dev Implementation** — the same as `next --to "Dev Implementation"`. From Agent Implementation that is one step; from an earlier state every state in between is entered first, each with its own automation. An item already at or past Dev Implementation is left as it is. Several targets advance in parallel.
|
|
221
299
|
|
|
222
300
|
```bash
|
|
223
301
|
idea1 start-dev-implementation [options]
|
|
224
302
|
idea1 dev [options]
|
|
303
|
+
idea1 dev --target <url>,<url>
|
|
225
304
|
```
|
|
226
305
|
|
|
227
306
|
**Options:**
|
|
307
|
+
- `--target <url | branch | PR url>[,...]` - The project item(s) (default: the current branch, when it is an item's)
|
|
228
308
|
- `-p, --source-path <path>` - Path to worktree directory
|
|
229
309
|
|
|
230
310
|
**What it does:**
|
|
231
311
|
1. Enters every state before Dev Implementation the item has yet to reach (after syncing from origin)
|
|
232
|
-
2. Commits and pushes all changes in the branch
|
|
312
|
+
2. Commits and pushes all changes in the branch's local checkout; a branch with no checkout here carries its work on origin already
|
|
233
313
|
3. Creates a PR of the branch into its base branch
|
|
234
314
|
4. Records "Dev Implementation" on Idea1.ai
|
|
235
315
|
5. If in a worktree and `removeWorktreeAtState` is `Dev Implementation`, removes the worktree. The main repo stays on its current branch; use `join-project-item` to work on the item in the main repo or a new worktree.
|
|
236
316
|
|
|
237
317
|
### ready-for-approval
|
|
238
318
|
|
|
239
|
-
|
|
319
|
+
For a project item, advance the item to **Needs Approval for Release** — the same as `next --to "Needs Approval for Release"`: from an earlier state, every state in between is entered first, each with its own automation (PR creation on the way into Dev Implementation, for one), and an item already at or past it is left as it is. For any other branch (an integration branch, a branch with no project item), open the branch's PR into the base branch when it has none. Either way its job is to name the **assignee**, who will approve the change by merging it. Several targets run in parallel.
|
|
240
320
|
|
|
241
321
|
```bash
|
|
242
322
|
idea1 ready-for-approval [options]
|
|
243
323
|
idea1 rfa --assignee octocat
|
|
244
324
|
idea1 rfa --assignee octocat # on working/integration/<name>-main: opens the PR into working/release
|
|
245
325
|
idea1 rfa --assignee octocat -b working/release # a branch with no project item, naming the PR target
|
|
326
|
+
idea1 rfa --assignee octocat --target <url>,<branch> # from working/release, in parallel
|
|
246
327
|
```
|
|
247
328
|
|
|
248
329
|
**Options:**
|
|
330
|
+
- `--target <url | branch | PR url>[,...]` - The project item(s) or branch(es) (default: the current branch; asked for on the base branch)
|
|
249
331
|
- `-a, --assignee <username>` - **Required.** Who approves the PR by merging it (prompted from the repository's assignable users when omitted)
|
|
250
332
|
- `-r, --reviewers <user1,user2>` - Who to request a review from (multi-select when omitted). Optional, and separate from approval — the assignee is the approver
|
|
251
333
|
- `-b, --base-branch <branch>` - Branches with no project item only: the branch the PR targets (default: the open PR's base, else `baseBranch`, then `working/release`)
|
|
252
334
|
- `--title <title>` - Branches with no project item only: PR title when the PR has to be created (default: `Integration <name> <YYYY-MM-DD>` for an integration branch, else the branch name; prompted when omitted)
|
|
253
335
|
|
|
254
|
-
**What it does
|
|
336
|
+
**What it does for a project item:**
|
|
255
337
|
1. Enters every state before Needs Approval for Release the item has yet to reach (after syncing from origin)
|
|
256
338
|
2. Ensures no uncommitted or unpushed changes in the local checkout
|
|
257
339
|
3. Requires the PR to exist, then sets the assignee (the transition refuses to proceed without one) and requests any reviewers
|
|
@@ -259,60 +341,95 @@ idea1 rfa --assignee octocat -b working/release # a branch with no project it
|
|
|
259
341
|
5. Records "Needs Approval for Release" on Idea1.ai. From here on the branch stays as it is
|
|
260
342
|
6. If in a worktree and `removeWorktreeAtState` is `Needs Approval for Release` (the default) or earlier, removes the worktree
|
|
261
343
|
|
|
262
|
-
**What it does
|
|
263
|
-
1. Requires
|
|
344
|
+
**What it does for a branch with no project item:**
|
|
345
|
+
1. Requires the branch on origin and, when it is checked out here, nothing uncommitted, unpushed or behind origin in that checkout; refuses the base branch itself and refuses a PR straight into `main` (that is `idea1 release`)
|
|
264
346
|
2. Reuses the branch's open PR (and its base) when one exists; otherwise creates the PR into the base branch with the approval chain of what the branch carries as its body — every PR merged into the branch with its author and approver, and commits pushed straight to the branch listed as the change under review (they are not an exception: this PR is their stage-1 approval)
|
|
265
347
|
3. Sets the assignee and requests any reviewers
|
|
266
348
|
4. Records no workflow status — there is no project item
|
|
267
349
|
|
|
268
350
|
### approve-pr
|
|
269
351
|
|
|
270
|
-
|
|
352
|
+
For a project item, advance the item to **Approved and Merged** — the same as `next --to "Approved and Merged"`: from an earlier state, every state in between is entered first, each with its own automation, and an item already at or past it is left as it is. For any other branch, merge the branch's PR. Run by the PR's **assignee**: it waits for the CI/CD suite and merges the PR, and that merge is the approval of record. There is no admin override at this stage for any branch. Several targets are approved in parallel, from `working/release`: each merges as soon as its PR can, and your checkout ends on `working/release`, up to date with every merge, with no worktree left behind.
|
|
271
353
|
|
|
272
354
|
```bash
|
|
273
355
|
idea1 approve-pr
|
|
274
356
|
idea1 approve
|
|
275
|
-
idea1 approve-pr --
|
|
357
|
+
idea1 approve-pr --target working/integration/<name>-main # from anywhere: the branch need not be checked out
|
|
358
|
+
idea1 approve-pr --target <url>,<branch>,<pr url> --yes # several, in parallel
|
|
276
359
|
```
|
|
277
360
|
|
|
278
361
|
**Options:**
|
|
279
|
-
-
|
|
362
|
+
- `--target <url | branch | PR url>[,...]` - The project item(s) or branch(es) whose PR to approve (default: the current branch; asked for on the base branch). A project item is approved through the workflow; any other branch through its PR alone
|
|
363
|
+
- `-y, --yes` - Merge without asking for confirmation. The approver check and the wait for the required checks still apply
|
|
280
364
|
|
|
281
|
-
**What it does
|
|
365
|
+
**What it does for a project item:**
|
|
282
366
|
1. Enters every state before Approved and Merged the item has yet to reach (after syncing from origin)
|
|
283
367
|
2. Verifies the approver: refuses when the PR has no assignee, and when you are not the assignee warns that the merge record will name you instead and requires an explicit confirmation (the evidence report lists such a merge as an exception)
|
|
284
|
-
3. Waits for the required CI/CD checks on the PR — the checks of the branch's tip on origin, which the PR must have picked up first — then merges the PR. A red or unfinished suite stops the merge — there is no admin override at this stage. The branch is merged as it stands. A legacy branch that still carries its workflow context file has the file removed and pushed instead, and the approval is left for a second run once the re-run suite passes
|
|
368
|
+
3. Refuses a PR that conflicts with its base straight away, before any wait, and again after the checks (another merge may have made it conflict meanwhile). Waits for the required CI/CD checks on the PR — the checks of the branch's tip on origin, which the PR must have picked up first — then merges the PR. A red or unfinished suite stops the merge — there is no admin override at this stage. The branch is merged as it stands. A legacy branch that still carries its workflow context file has the file removed and pushed instead, and the approval is left for a second run once the re-run suite passes
|
|
285
369
|
4. Records "Approved and Merged" on Idea1.ai
|
|
286
|
-
5.
|
|
370
|
+
5. Deletes the feature branch: when it is checked out in the main repo, switches to the base branch first; inside a worktree, removes the worktree instead — this always happens, since the base branch can't be checked out in place there. Then fast-forwards the base branch's local checkout to the merge
|
|
287
371
|
|
|
288
|
-
**What it does
|
|
372
|
+
**What it does for a branch with no project item:**
|
|
289
373
|
1. Finds the branch's PR (run `ready-for-approval` first if there is none) and takes the target branch from it
|
|
290
374
|
2. Refuses while any open PR still targets the branch — merging would retire the branch and orphan them
|
|
291
|
-
3. Verifies the approver exactly as above, waits for the required CI/CD checks and merges. A red or unfinished suite stops the merge — no override
|
|
292
|
-
4. Deletes the branch on origin and locally (removing its worktree, or switching to the base branch first when it is checked out in the main repo). Records no workflow status
|
|
375
|
+
3. Verifies the approver exactly as above, refuses a conflicting PR, waits for the required CI/CD checks and merges. A red or unfinished suite stops the merge — no override
|
|
376
|
+
4. Deletes the branch on origin and locally (removing its worktree, or switching to the base branch first when it is checked out in the main repo), and fast-forwards the base branch's local checkout. Records no workflow status
|
|
293
377
|
|
|
294
378
|
### release
|
|
295
379
|
|
|
296
|
-
Release everything on the release branch to production.
|
|
380
|
+
Release everything on the release branch to production. Bumps the versions of the packages that changed since the last release (committing the bump to the release branch), opens the release PR from `working/release` into `main`, **assigned to you**, and merges it — the person who runs the command is the releaser and the approver, and no review is required, because every change in the release was already approved on its own PR.
|
|
297
381
|
|
|
298
382
|
```bash
|
|
299
|
-
idea1 release
|
|
300
|
-
idea1 release --
|
|
383
|
+
idea1 release # prompts for any version bumps, the PR mode and title
|
|
384
|
+
idea1 release --bumps filekit=minor,cli=patch # bump types given up front
|
|
385
|
+
idea1 release --pr-mode merge # enable auto-merge (or wait for the checks and merge here)
|
|
386
|
+
idea1 release --approve # approve and merge the open release PR
|
|
387
|
+
idea1 release --target <url>,<branch> # approve these into the release branch first, then release
|
|
301
388
|
idea1 r
|
|
302
389
|
```
|
|
303
390
|
|
|
304
391
|
**Options:**
|
|
305
|
-
- `-b, --branch <branch>` - Source branch to release from (default: `
|
|
306
|
-
- `-t, --target <branch>` - Target branch to release into (default: `releaseTargetBranch`, then `main`)
|
|
307
|
-
-
|
|
392
|
+
- `-b, --branch <branch>` - Source branch to release from (default: `baseBranch`, then `working/release`)
|
|
393
|
+
- `-t, --target-branch <branch>` - Target branch to release into (default: `releaseTargetBranch`, then `main`)
|
|
394
|
+
- `--approve` - Approve and merge the release PR that is already open, instead of opening one. See [Approving an open release](#approving-an-open-release)
|
|
395
|
+
- `--target <url | branch | PR url>[,...]` - Project items, branches or PRs to approve into the release branch before releasing it. Asked for, blank by default, which releases the branch as it is. See [Releasing with approvals](#releasing-with-approvals)
|
|
396
|
+
- `--bumps <package=type,...>` - Version bump per changed package, as `patch`, `minor` or `major` (e.g. `filekit=minor,cli=patch`). A changed package it doesn't name is prompted for, with `patch` preselected; a package that needs no bump is ignored
|
|
397
|
+
- `-pr, --pr-mode <mode>` - `create` (default) creates the PR and opens it in the browser so you merge it there once the required checks pass; `merge` turns on GitHub's auto-merge, so GitHub merges once the required checks pass, and falls back to waiting for every check with `gh` and merging here when GitHub can't auto-merge (the PR is already mergeable, or the repository doesn't allow auto-merge). You are the recorded merger, and the merge is the recorded approval, in every case
|
|
308
398
|
- `--title <title>` - PR title (default: `Release <YYYY-MM-DD>`)
|
|
399
|
+
- `-y, --yes` - In `merge` mode, merge without asking for confirmation; with `--target`, also start the approvals without asking. The required checks still gate every merge
|
|
309
400
|
|
|
310
401
|
**What it does:**
|
|
311
|
-
1. Requires you to be on the release branch with nothing uncommitted, unpushed or behind origin
|
|
312
|
-
2.
|
|
313
|
-
3.
|
|
314
|
-
4.
|
|
315
|
-
5.
|
|
402
|
+
1. Requires you to be on the release branch with nothing uncommitted, unpushed or behind origin
|
|
403
|
+
2. Bumps versions, when the repository's `.idea1/settings.json` has a `release` section (see [Release Settings](#release-settings)). A versioned package needs a bump when its folder differs between the release branch and the target and its `package.json` version is still the same on both — so a release re-run after a bump never bumps twice. You pick `patch`, `minor` or `major` for each such package (or give them with `--bumps`), and are asked nothing when no package changed. The CLI makes the bump itself, in your checkout, with no script or workflow: it sets the new version in each package's `package.json` and in the lockfiles at or above the package's folder that record it (the same files `npm version` touches, edited in place so nothing else changes), commits them as one `chore: bump <package> <version>, ...` commit and pushes it to the release branch. Only plain `major.minor.patch` versions are bumped. The bump lands before the PR is opened, so its commit is the PR's head and the suite runs once, on the release as it will merge. A bump is never made onto a release PR that is already open, which may already be approved. The Idea1 web app's release view makes the same bump through the GitHub API
|
|
404
|
+
3. Creates the release PR assigned to you, whose body is the release's approval chain: every contained PR — attributed by GitHub's commit association, so squash and rebase merges are covered — with its author and the assignee who approved it by merging. Commits with no PR are listed separately, split in two: the version bumps (a commit with no PR that changes only version files, meaning the `package.json` of a declared package and the lockfiles above it, whatever its name or author), which are release automation and not an exception, and genuine direct commits, which are exceptions under change-management-policy.md clause 2, explained at the quarterly review
|
|
405
|
+
4. Refuses the release when nothing in it came through a merged PR. A repository admin can override that — an explicit confirmation and a required reason — and the exception is recorded as a comment on the PR naming the admin, the reason and every commit that had no PR, as well as in the PR body. Anyone who is not a repository admin just gets the refusal
|
|
406
|
+
5. In `merge` mode, enables auto-merge, or waits for the required CI/CD checks and merges normally. Checks that fail, never start or never finish stop the release; an admin override is available but takes an explicit confirmation and a required reason, and the exception is recorded as a comment on the PR before anything is merged
|
|
407
|
+
6. Opens GitHub Actions once it has merged the PR itself, where the merge to `main` has triggered the production deploy
|
|
408
|
+
|
|
409
|
+
#### Releasing with approvals
|
|
410
|
+
|
|
411
|
+
`idea1 release --target <items, branches or PRs>` releases the release branch once the given targets are approved into it, as one unattended sequence:
|
|
412
|
+
|
|
413
|
+
1. **Checks:** your checkout must be on the release branch, clean and level with origin. Then every target is resolved exactly as `approve-pr` resolves several targets.
|
|
414
|
+
2. **Questions, all asked up front:**
|
|
415
|
+
- the options the targets' workflow states need, then one confirmation of the approvals;
|
|
416
|
+
- the version bump of every versioned package changed on the release branch or on any target's branch;
|
|
417
|
+
- the title (`--pr-mode` is asked as usual).
|
|
418
|
+
3. **Approvals:** every target's PR is approved in parallel, each in its own unattended run, exactly as `approve-pr` does.
|
|
419
|
+
4. **Fast fail:** the first target that fails (a red check, or a PR that cannot merge) stops the others, and nothing is released. Fix it and run the command again: the approvals that merged stay merged.
|
|
420
|
+
5. **Release:** once every target has merged, the release runs as it does on its own, in your up-to-date checkout:
|
|
421
|
+
- it bumps the versions;
|
|
422
|
+
- it opens the release PR into `main`, assigned to you;
|
|
423
|
+
- it carries on in the chosen PR mode.
|
|
424
|
+
|
|
425
|
+
In interactive mode the whole sequence runs as a background job (see `/jobs`); otherwise it runs in the foreground, reporting each run's steps.
|
|
426
|
+
|
|
427
|
+
#### Approving an open release
|
|
428
|
+
|
|
429
|
+
`idea1 release --approve` finds the open release PR from the release branch into the target and merges it as its approver, after the same assignee check as `approve-pr`:
|
|
430
|
+
- every check passed — merges now
|
|
431
|
+
- checks still running — enables auto-merge, or waits for the checks and merges where GitHub can't auto-merge
|
|
432
|
+
- a check failed — stops, unless a repository admin confirms the admin override, gives a reason, and has it recorded on the PR before the merge
|
|
316
433
|
|
|
317
434
|
## Configuration
|
|
318
435
|
|
|
@@ -354,19 +471,38 @@ Create `.idea1/settings.json` in your repository root to configure repo-specific
|
|
|
354
471
|
**Prompts:**
|
|
355
472
|
- `agentImplementation` - The prompt an Agent Implementation session starts with. See [Prompts](#prompts).
|
|
356
473
|
|
|
474
|
+
**Release:** see [Release Settings](#release-settings).
|
|
475
|
+
|
|
357
476
|
**Defaults:**
|
|
358
477
|
- `branchPrefix` - Prefix for new branches (default: `working/agent`)
|
|
359
478
|
- `baseBranch` - Default base branch for branching (default: `working/release`)
|
|
360
479
|
- `testCommand` - Command to run tests before PR creation (e.g., `npm run test`)
|
|
361
480
|
- `removeWorktreeAtState` - Workflow state whose transition removes the worktree (default: `Needs Approval for Release`). See [Worktree Removal](#worktree-removal).
|
|
362
481
|
|
|
482
|
+
### Release Settings
|
|
483
|
+
|
|
484
|
+
The optional `release` section declares the repository folders `idea1 release` (and the Idea1 web app's release view) can version. A repository without it has no version bump step.
|
|
485
|
+
|
|
486
|
+
```json
|
|
487
|
+
{
|
|
488
|
+
"release": {
|
|
489
|
+
"versionedPackages": [
|
|
490
|
+
{ "name": "filekit", "label": "filekit package", "path": "packages/filekit" },
|
|
491
|
+
{ "name": "cli", "label": "idea1 CLI", "path": "omega/idea1-cli" }
|
|
492
|
+
]
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
- `versionedPackages` - The packages a release can bump: `name` (used by `--bumps`), `label` (shown in prompts) and `path` (the folder holding the package's `package.json`, relative to the repository root). A package needs a bump when its folder differs between the release branch and the target while its `package.json` version is the same on both
|
|
498
|
+
|
|
363
499
|
### Local Settings Overrides
|
|
364
500
|
|
|
365
501
|
`.idea1/settings.local.json` is an optional, git-ignored file with the same shape as
|
|
366
502
|
`settings.json`. Anything it defines overrides the committed settings for that clone
|
|
367
503
|
only, which keeps developer-specific preferences out of the shared configuration.
|
|
368
|
-
`hooks`, `prompts` and `
|
|
369
|
-
leaves the rest of the committed settings in place.
|
|
504
|
+
`hooks`, `prompts`, `defaults` and `release` are merged section by section, so overriding one
|
|
505
|
+
value leaves the rest of the committed settings in place.
|
|
370
506
|
|
|
371
507
|
```json
|
|
372
508
|
{
|
package/dist/cli/resolver.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { Command } from '../types/index.js';
|
|
|
12
12
|
* applicable, so it is neither prompted nor required and left unset.
|
|
13
13
|
* 1. Skip if isFlag — flags are never prompted
|
|
14
14
|
* 2. Skip if already in parsed — value was provided on CLI
|
|
15
|
+
* 2a. If resolveValue exists: let it resolve the value (it may ask), and use that
|
|
15
16
|
* 3. If has default and promptWhenDefaultExists is not true: silently use default
|
|
16
17
|
* 4. If no default: prompt (required — re-prompt until valid value given)
|
|
17
18
|
* 5. If has default and promptWhenDefaultExists is true: prompt showing default as hint
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/cli/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAC;AAKhE
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/cli/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAC;AAKhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6GjC"}
|
package/dist/cli/resolver.js
CHANGED
|
@@ -14,6 +14,7 @@ import { resolveNamedList } from './named-lists.js';
|
|
|
14
14
|
* applicable, so it is neither prompted nor required and left unset.
|
|
15
15
|
* 1. Skip if isFlag — flags are never prompted
|
|
16
16
|
* 2. Skip if already in parsed — value was provided on CLI
|
|
17
|
+
* 2a. If resolveValue exists: let it resolve the value (it may ask), and use that
|
|
17
18
|
* 3. If has default and promptWhenDefaultExists is not true: silently use default
|
|
18
19
|
* 4. If no default: prompt (required — re-prompt until valid value given)
|
|
19
20
|
* 5. If has default and promptWhenDefaultExists is true: prompt showing default as hint
|
|
@@ -56,6 +57,10 @@ export async function resolveOptions(command, parsed) {
|
|
|
56
57
|
}
|
|
57
58
|
continue;
|
|
58
59
|
}
|
|
60
|
+
if (option.resolveValue) {
|
|
61
|
+
resolved[option.longName] = await option.resolveValue(resolved);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
59
64
|
const defaultVal = resolveDefault(option);
|
|
60
65
|
const hasDefault = defaultVal !== undefined;
|
|
61
66
|
const promptWhenDefault = option.promptWhenDefaultExists !== false; // default true
|
package/dist/cli/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/cli/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/cli/resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E1D"}
|
package/dist/cli.js
CHANGED
|
@@ -21,7 +21,8 @@ export async function runCli(argv) {
|
|
|
21
21
|
if (!isSimpleFlag) {
|
|
22
22
|
try {
|
|
23
23
|
repoRoot = await git.getRepoRoot();
|
|
24
|
-
|
|
24
|
+
// The main clone is set up, never a worktree, whose branch a setup change would make dirty.
|
|
25
|
+
await ensureSetup((await git.getMainRepoRoot()).trim());
|
|
25
26
|
}
|
|
26
27
|
catch {
|
|
27
28
|
// Not in a git repository - skip setup
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,8CAA8C;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,sBAAsB;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,qEAAqE;IACrE,MAAM,YAAY,GAAG,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,IAAI;WAC7D,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC;IAEhD,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|