Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ Why: silent "lookup" paths that walk to the wire (alias dispatch, hook context b

What currently reaches the wire:

- `wt list --full`, `wt list statusline` — CI status; also plain `wt list` (any format) when `[list] columns` names `ci`, which forces the column (and its fetch) on without `--full`
- `wt list --full`, `wt list statusline` — CI status; also plain `wt list` (table) when `[list] columns` names `ci`, which forces the column (and its fetch) on without `--full`. `--format json` plans off `--full` alone, so a display setting can't send a machine-readable call to a forge
- `wt switch` (interactive picker, no target) — per-row CI status, primed from the local cache then fetched live and streamed into the rows; once a row's CI fetch surfaces an open PR/MR, a per-row background `gh pr view <n> --json comments` (`glab api …/notes` on GitLab) fills that row's `comments` preview tab — the same fetch a `--prs` row makes, spawned once per row from `progressive_handler` (see `picker::prs::spawn_comments_fetch`). The `comments` tab is the only PR data fetched lazily here; `pr` rides the CI call and `log` is the local `git log`
- generating a branch summary with a `commit.generation` command
- generating a commit message with a `commit.generation` command
Expand Down
17 changes: 7 additions & 10 deletions dev/config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,13 @@
#
# timeout-ms = 0 # Wall-clock budget for the entire collect phase; 0 disables
#
# `columns` selects and orders the columns to render; omit it for the default set.
# It is meant to drive a per-invocation alias (https://worktrunk.dev/extending/#aliases)
# (`wt --config-set 'list.columns=[…]' list`), giving a named view without
# disturbing the default `wt list`. A static setting works but pins one layout
# over a table that otherwise adapts to `--full` and terminal width.
# `columns` selects and orders the columns the `wt list` table and the `wt switch`
# picker render; `--format json` ignores it and always emits every field. Omit it
# for the default set. It is meant to drive a per-invocation
# alias (https://worktrunk.dev/extending/#aliases) (`wt --config-set 'list.columns=[…]' list`),
# giving a named view without disturbing the default `wt list`. A static setting
# works but pins one layout over a table that otherwise adapts to `--full` and
# terminal width.
#
# Valid built-in names:
#
Expand Down Expand Up @@ -139,11 +141,6 @@
# needs an LLM command (`[commit.generation]`), `url` needs a `[list] url`
# template — since listing can't supply the data.
#
# The selection drives the table and the `wt switch` picker. `wt list --format
# json` always emits every field, but a listed gated column (`ci`, `summary`)
# still forces its data collection on, so the JSON carries the same data the
# table shows.
#
# #### Custom columns [experimental]
#
# Custom columns add per-branch context to the `wt list` table. Each
Expand Down
17 changes: 7 additions & 10 deletions docs/content/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,13 @@ columns = ["branch", "status", "ci", "path"] # Columns to show, in order — b
timeout-ms = 0 # Wall-clock budget for the entire collect phase; 0 disables
```

`columns` selects and orders the columns to render; omit it for the default set.
It is meant to drive a per-invocation [alias](@/extending.md#aliases)
(`wt --config-set 'list.columns=[…]' list`), giving a named view without
disturbing the default `wt list`. A static setting works but pins one layout
over a table that otherwise adapts to `--full` and terminal width.
`columns` selects and orders the columns the `wt list` table and the `wt switch`
picker render; `--format json` ignores it and always emits every field. Omit it
for the default set. It is meant to drive a per-invocation
[alias](@/extending.md#aliases) (`wt --config-set 'list.columns=[…]' list`),
giving a named view without disturbing the default `wt list`. A static setting
works but pins one layout over a table that otherwise adapts to `--full` and
terminal width.

Valid built-in names:

Expand Down Expand Up @@ -227,11 +229,6 @@ named one. A column whose data source is missing still stays hidden — `summary
needs an LLM command (`[commit.generation]`), `url` needs a `[list] url`
template — since listing can't supply the data.

The selection drives the table and the `wt switch` picker. `wt list --format
json` always emits every field, but a listed gated column (`ci`, `summary`)
still forces its data collection on, so the JSON carries the same data the
table shows.

#### Custom columns

<span class="badge-experimental"></span>
Expand Down
6 changes: 3 additions & 3 deletions docs/content/list.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,10 @@ Item fields:
| `worktree` | `{path, main, current, previous, detached, locked, prunable, branch_mismatch, duplicate_branch, operation, changes}`; absent on branch-only rows. `locked`/`prunable` are `{reason}` objects and can co-occur; `operation` is `"rebase"` or `"merge"`; `changes` holds the five working-tree flags plus `conflicted` and `diff {added, deleted}` |
| `default_branch` | Relation to the default branch: `{ahead, behind, diff, orphan, integration, merge_conflicts}`; absent on the default branch itself. `integration.reason` is one of `same_commit`, `ancestor`, `no_added_changes`, `trees_match`, `merge_adds_nothing`, `patch_id_match`; a dirty tree skips the checks, leaving `integration` null |
| `upstream` | Tracking branch: `{remote, branch, ahead, behind}`; absent when none is configured |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full` or a listed `ci` column. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full`. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; collected with `--full`. `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `dev_server` | `{url, listening}` from the project's `list.url` template |
| `summary` | LLM branch summary (requires `[list] summary = true`) |
| `summary` | LLM branch summary; needs `--full`, `[list] summary = true`, and a `[commit.generation]` command |
| `vars` | Per-branch variables from [`wt config state vars`](@/config.md#wt-config-state-vars) |
| `display` | Rendered strings: `state` (schema 1's `main_state` vocabulary), `symbols`, `statusline` (with ANSI colors and OSC 8 hyperlinks), `columns` (custom-column cells keyed by header) |

Expand Down
2 changes: 1 addition & 1 deletion docs/static/schema/list-v2.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
]
},
"Collected": {
"description": "Fact families whose collection is gated (`--full`, `[list] summary`,\na listed `ci`/`summary` column). Ungated families (working tree, counts,\ndiffs) are always requested. Serialized as-is into the schema-2 JSON\nenvelope's `collected` field, disambiguating \"absent because not\nrequested\".",
"description": "Fact families whose collection is gated (`--full`, `[list] summary`).\nUngated families (working tree, counts, diffs) are always requested.\nSerialized as-is into the schema-2 JSON envelope's `collected` field,\ndisambiguating \"absent because not requested\".",
"properties": {
"ci": {
"description": "Forge CI/PR data was fetched.",
Expand Down
17 changes: 7 additions & 10 deletions plugins/worktrunk/skills/worktrunk/reference/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,13 @@ columns = ["branch", "status", "ci", "path"] # Columns to show, in order — b
timeout-ms = 0 # Wall-clock budget for the entire collect phase; 0 disables
```

`columns` selects and orders the columns to render; omit it for the default set.
It is meant to drive a per-invocation [alias](https://worktrunk.dev/extending/#aliases)
(`wt --config-set 'list.columns=[…]' list`), giving a named view without
disturbing the default `wt list`. A static setting works but pins one layout
over a table that otherwise adapts to `--full` and terminal width.
`columns` selects and orders the columns the `wt list` table and the `wt switch`
picker render; `--format json` ignores it and always emits every field. Omit it
for the default set. It is meant to drive a per-invocation
[alias](https://worktrunk.dev/extending/#aliases) (`wt --config-set 'list.columns=[…]' list`),
giving a named view without disturbing the default `wt list`. A static setting
works but pins one layout over a table that otherwise adapts to `--full` and
terminal width.

Valid built-in names:

Expand Down Expand Up @@ -226,11 +228,6 @@ named one. A column whose data source is missing still stays hidden — `summary
needs an LLM command (`[commit.generation]`), `url` needs a `[list] url`
template — since listing can't supply the data.

The selection drives the table and the `wt switch` picker. `wt list --format
json` always emits every field, but a listed gated column (`ci`, `summary`)
still forces its data collection on, so the JSON carries the same data the
table shows.

#### Custom columns [experimental]

Custom columns add per-branch context to the `wt list` table. Each
Expand Down
6 changes: 3 additions & 3 deletions plugins/worktrunk/skills/worktrunk/reference/list.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,10 @@ Item fields:
| `worktree` | `{path, main, current, previous, detached, locked, prunable, branch_mismatch, duplicate_branch, operation, changes}`; absent on branch-only rows. `locked`/`prunable` are `{reason}` objects and can co-occur; `operation` is `"rebase"` or `"merge"`; `changes` holds the five working-tree flags plus `conflicted` and `diff {added, deleted}` |
| `default_branch` | Relation to the default branch: `{ahead, behind, diff, orphan, integration, merge_conflicts}`; absent on the default branch itself. `integration.reason` is one of `same_commit`, `ancestor`, `no_added_changes`, `trees_match`, `merge_adds_nothing`, `patch_id_match`; a dirty tree skips the checks, leaving `integration` null |
| `upstream` | Tracking branch: `{remote, branch, ahead, behind}`; absent when none is configured |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full` or a listed `ci` column. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full`. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; collected with `--full`. `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `dev_server` | `{url, listening}` from the project's `list.url` template |
| `summary` | LLM branch summary (requires `[list] summary = true`) |
| `summary` | LLM branch summary; needs `--full`, `[list] summary = true`, and a `[commit.generation]` command |
| `vars` | Per-branch variables from [`wt config state vars`](https://worktrunk.dev/config/#wt-config-state-vars) |
| `display` | Rendered strings: `state` (schema 1's `main_state` vocabulary), `symbols`, `statusline` (with ANSI colors and OSC 8 hyperlinks), `columns` (custom-column cells keyed by header) |

Expand Down
17 changes: 7 additions & 10 deletions skills/worktrunk/reference/config.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions skills/worktrunk/reference/list.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 10 additions & 13 deletions src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1026,10 +1026,10 @@ Item fields:
| `worktree` | `{path, main, current, previous, detached, locked, prunable, branch_mismatch, duplicate_branch, operation, changes}`; absent on branch-only rows. `locked`/`prunable` are `{reason}` objects and can co-occur; `operation` is `"rebase"` or `"merge"`; `changes` holds the five working-tree flags plus `conflicted` and `diff {added, deleted}` |
| `default_branch` | Relation to the default branch: `{ahead, behind, diff, orphan, integration, merge_conflicts}`; absent on the default branch itself. `integration.reason` is one of `same_commit`, `ancestor`, `no_added_changes`, `trees_match`, `merge_adds_nothing`, `patch_id_match`; a dirty tree skips the checks, leaving `integration` null |
| `upstream` | Tracking branch: `{remote, branch, ahead, behind}`; absent when none is configured |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full` or a listed `ci` column. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `pr` | Open PR/MR: `{number, url, review, mergeable, repo}`; collected with `--full`. `review` uses the schema 1 `ci.review_state` vocabulary; `mergeable` is false when the forge reports conflicts, null otherwise |
| `checks` | CI pipeline: `{status, source, stale}`; collected with `--full`. `status` is `passed`, `running`, or `failed` — null when a conflicts report masks it |
| `dev_server` | `{url, listening}` from the project's `list.url` template |
| `summary` | LLM branch summary (requires `[list] summary = true`) |
| `summary` | LLM branch summary; needs `--full`, `[list] summary = true`, and a `[commit.generation]` command |
| `vars` | Per-branch variables from [`wt config state vars`](@/config.md#wt-config-state-vars) |
| `display` | Rendered strings: `state` (schema 1's `main_state` vocabulary), `symbols`, `statusline` (with ANSI colors and OSC 8 hyperlinks), `columns` (custom-column cells keyed by header) |

Expand Down Expand Up @@ -2083,11 +2083,13 @@ columns = ["branch", "status", "ci", "path"] # Columns to show, in order — b
timeout-ms = 0 # Wall-clock budget for the entire collect phase; 0 disables
```

`columns` selects and orders the columns to render; omit it for the default set.
It is meant to drive a per-invocation [alias](@/extending.md#aliases)
(`wt --config-set 'list.columns=[…]' list`), giving a named view without
disturbing the default `wt list`. A static setting works but pins one layout
over a table that otherwise adapts to `--full` and terminal width.
`columns` selects and orders the columns the `wt list` table and the `wt switch`
picker render; `--format json` ignores it and always emits every field. Omit it
for the default set. It is meant to drive a per-invocation
[alias](@/extending.md#aliases) (`wt --config-set 'list.columns=[…]' list`),
giving a named view without disturbing the default `wt list`. A static setting
works but pins one layout over a table that otherwise adapts to `--full` and
terminal width.

Valid built-in names:

Expand Down Expand Up @@ -2117,11 +2119,6 @@ named one. A column whose data source is missing still stays hidden — `summary
needs an LLM command (`[commit.generation]`), `url` needs a `[list] url`
template — since listing can't supply the data.

The selection drives the table and the `wt switch` picker. `wt list --format
json` always emits every field, but a listed gated column (`ci`, `summary`)
still forces its data collection on, so the JSON carries the same data the
table shows.

#### Custom columns [experimental]

Custom columns add per-branch context to the `wt list` table. Each
Expand Down
Loading
Loading