carson 3.13.1 → 3.13.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb773d053eb0271bf5b1997349eaf9afa972ad5ba8612a3930764e2ace68592d
4
- data.tar.gz: 957745cc1c1f0ee91e2a58062e6730b4ff09f3c78e7c7178f7d7d602ac74b858
3
+ metadata.gz: d49ac2582d874ea7b4a25a9d71401fd8424b33ef8740ef8c9d1588d81616b00a
4
+ data.tar.gz: 37d5ba4ebe4c7455eb1751a55cff6724f073bcce37463080fa3324db86c42fac
5
5
  SHA512:
6
- metadata.gz: f547c3aa8645e9da8877c24e645dad85896cd3640890f9da2c6d35cd5557fe0fcd784e3dd75a74910d677544be2294aace0720bd6267e56f1fb7e99c3abe094b
7
- data.tar.gz: 01a7ec9498cae31c12e1f68a3498381ad8f7bb5a229de5b2e833c410b06cca4759abd426583b39c766b931d1e829c3fae1cb9272d12b60ea52e59328296bb287
6
+ metadata.gz: 33498b92e55ab4caab2ddb9935ca1ce2b1965e61f03898849720cedbd24e878d981662fa1acad7312addb08d7bb90e83ab72e2f55658087f2af2c3f3d9c37f2c
7
+ data.tar.gz: 01ee3460c17e00db79f9216592bda4171cc135ceb90ff88d3c83fa8925653f50ad1b3b8ea98e1f6ef37bce1a4f0f2e868d06968d7788e466f54d7d21e99b842b
data/MANUAL.md CHANGED
@@ -108,6 +108,40 @@ Carson discovers files in this directory and syncs them to governed repos alongs
108
108
 
109
109
  **Why this design.** Lint, CI, and tooling config are personal decisions — not governance decisions. Carson's job is to deliver your canonical files reliably, not to decide what they should contain.
110
110
 
111
+ ## Agent Worktree Workflow
112
+
113
+ The core workflow for coding agents using Carson. One command per step, full lifecycle.
114
+
115
+ **1. Create a worktree** — Carson auto-syncs main before branching (3.13.0+), so the worktree always starts from the latest code:
116
+
117
+ ```bash
118
+ carson worktree create my-feature
119
+ cd /path/to/.claude/worktrees/my-feature
120
+ ```
121
+
122
+ **2. Work** — make changes, commit, iterate.
123
+
124
+ **3. Deliver and merge** — push, create PR, merge when CI passes. After merge, Carson prints the exact next command (3.13.0+):
125
+
126
+ ```bash
127
+ carson deliver --merge
128
+ # Output: Merged PR #N via squash.
129
+ # Next: cd /path/to/repo && carson worktree remove my-feature
130
+ ```
131
+
132
+ **4. Clean up** — follow the printed next step. After squash merge, Carson detects the content is on main and allows removal without `--force` (3.13.1+):
133
+
134
+ ```bash
135
+ cd /path/to/repo && carson worktree remove my-feature
136
+ carson prune
137
+ ```
138
+
139
+ **Safety guards** — `worktree remove` blocks when:
140
+ - Shell CWD is inside the worktree (prevents session crash).
141
+ - Branch has unpushed commits with content that differs from main (prevents data loss).
142
+
143
+ After squash or rebase merge, the content matches main — removal proceeds without `--force`.
144
+
111
145
  ## Daily Operations
112
146
 
113
147
  **Start of work:**
data/RELEASE.md CHANGED
@@ -5,6 +5,17 @@ Release-note scope rule:
5
5
  - `RELEASE.md` records only version deltas, breaking changes, and migration actions.
6
6
  - Operational usage guides live in `MANUAL.md` and `API.md`.
7
7
 
8
+ ## 3.13.2
9
+
10
+ ### What changed
11
+
12
+ - **Fix CI detection in `deliver --merge`** — `check_pr_ci` queried `gh pr checks --json name,state,conclusion` but `conclusion` is not a valid field in current `gh` CLI versions. Every `deliver --merge` silently fell back to "CI: none" and skipped the merge step. Now uses `--json name,bucket` which returns `pass`/`fail`/`pending` directly.
13
+ - **Document agent worktree workflow** — added "Agent Worktree Workflow" section to MANUAL.md covering the full create → work → deliver → clean up lifecycle with 3.13.x improvements.
14
+
15
+ ### UX improvement
16
+
17
+ - `deliver --merge` now actually detects CI status and merges when green. Previously it always said "CI: none" due to the broken field query.
18
+
8
19
  ## 3.13.1
9
20
 
10
21
  ### What changed
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.13.1
1
+ 3.13.2
@@ -214,25 +214,23 @@ module Carson
214
214
  end
215
215
 
216
216
  # Checks CI status on a PR. Returns :pass, :fail, :pending, or :none.
217
- def check_pr_ci( number: )
218
- stdout, _, success, = gh_run(
219
- "pr", "checks", number.to_s,
220
- "--json", "name,state,conclusion"
221
- )
222
- return :none unless success
223
-
224
- checks = JSON.parse( stdout ) rescue []
225
- return :none if checks.empty?
226
-
227
- conclusions = checks.map { |c| c[ "conclusion" ].to_s.upcase }
228
- states = checks.map { |c| c[ "state" ].to_s.upcase }
229
-
230
- return :fail if conclusions.any? { |c| c == "FAILURE" || c == "CANCELLED" || c == "TIMED_OUT" }
231
- return :pending if states.any? { |s| s == "PENDING" || s == "QUEUED" || s == "IN_PROGRESS" } ||
232
- conclusions.any? { |c| c == "" || c == "PENDING" }
233
-
234
- :pass
235
- end
217
+ # Uses the `bucket` field (pass/fail/pending) from `gh pr checks --json`.
218
+ def check_pr_ci( number: )
219
+ stdout, _, success, = gh_run(
220
+ "pr", "checks", number.to_s,
221
+ "--json", "name,bucket"
222
+ )
223
+ return :none unless success
224
+
225
+ checks = JSON.parse( stdout ) rescue []
226
+ return :none if checks.empty?
227
+
228
+ buckets = checks.map { |c| c[ "bucket" ].to_s.downcase }
229
+ return :fail if buckets.include?( "fail" )
230
+ return :pending if buckets.include?( "pending" )
231
+
232
+ :pass
233
+ end
236
234
 
237
235
  # Checks review decision on a PR. Returns :approved, :changes_requested, :review_required, or :none.
238
236
  def check_pr_review( number: )
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carson
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.1
4
+ version: 3.13.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hailei Wang