Browse commits and files at a ref, show signature state, manage org labels #284

Merged
stephen merged 1 commit from feat/spec-parity-browse into feat/spec-parity-pr 2026-10-08 19:42:58 +00:00
Owner

Four fjord-client-spec requirements: ssh-gpg-keys (commit signature
state), code-browsing (tags and browsing a tag ref), actions-ci
(Actions variables) and labels (organization labels and exclusive
groups).

fj repo commit list|view read history at --ref, --branch or --tag and
show each commit's signature state from the verification object:
verified with the signer, or nothing when the commit is unsigned. The
SIGNATURE column is dropped when no commit reports one.

fj repo contents [PATH] reads a file or directory at a ref. A tag is
pinned to its commit and labelled read-only. fj browse --tag opens the
tag route.

fj label list|create|edit|delete --org ORG work on organization
labels, with --exclusive and --no-exclusive for group/name labels.
Assigning labels on issue and pr create or edit now falls back to the
org's labels for names the repository does not have, and when an
exclusive label displaces a sibling the message is taken from the set
the forge confirms.

fj label create and fj label edit panicked at parse time on main,
with or without the flag: their --color shared an arg id with the
global ANSI --color. The label flag is now --label-color.

fj variable set could not create a variable (PUT only) and a
non-empty fj variable list failed to decode, because the model
required a created_at the API does not send. set now reads, then
PUTs or POSTs, then confirms. The list table is NAME / VALUE / SCOPE and
its JSON follows the ActionVariable shape. Variable values no longer
reach --debug output.

Covered by unit and wiremock tests only. Two things deserve a live check. The variable list model was rewritten to the swagger ActionVariable shape, and the test list_variables_parses_live_bare_array was rewritten with it, so the claim that the old shape never decoded rests on the swagger document and not on a recorded response. And --color to --label-color on label create|edit is a flag rename, though the old spelling could not be used: both commands panic at src/cli/mod.rs:105 on main ("Mismatch between definition and access of color").

Part 7 of 8 in the spec-parity stack. Based on feat/spec-parity-pr, so the diff here is this slice alone; it needs a rebase onto main once the PR below it is squash-merged.

Verified on macOS at this commit: cargo fmt --all clean, cargo clippy --all-targets --all-features -- -D warnings clean, cargo test --all green.

Four fjord-client-spec requirements: ssh-gpg-keys (commit signature state), code-browsing (tags and browsing a tag ref), actions-ci (Actions variables) and labels (organization labels and exclusive groups). `fj repo commit list|view` read history at --ref, --branch or --tag and show each commit's signature state from the `verification` object: verified with the signer, or nothing when the commit is unsigned. The SIGNATURE column is dropped when no commit reports one. `fj repo contents [PATH]` reads a file or directory at a ref. A tag is pinned to its commit and labelled read-only. `fj browse --tag` opens the tag route. `fj label list|create|edit|delete --org ORG` work on organization labels, with --exclusive and --no-exclusive for `group/name` labels. Assigning labels on issue and pr create or edit now falls back to the org's labels for names the repository does not have, and when an exclusive label displaces a sibling the message is taken from the set the forge confirms. `fj label create` and `fj label edit` panicked at parse time on main, with or without the flag: their `--color` shared an arg id with the global ANSI `--color`. The label flag is now `--label-color`. `fj variable set` could not create a variable (PUT only) and a non-empty `fj variable list` failed to decode, because the model required a `created_at` the API does not send. `set` now reads, then PUTs or POSTs, then confirms. The list table is NAME / VALUE / SCOPE and its JSON follows the ActionVariable shape. Variable values no longer reach --debug output. Covered by unit and wiremock tests only. Two things deserve a live check. The `variable list` model was rewritten to the swagger `ActionVariable` shape, and the test `list_variables_parses_live_bare_array` was rewritten with it, so the claim that the old shape never decoded rests on the swagger document and not on a recorded response. And `--color` to `--label-color` on `label create|edit` is a flag rename, though the old spelling could not be used: both commands panic at `src/cli/mod.rs:105` on main ("Mismatch between definition and access of `color`"). Part 7 of 8 in the spec-parity stack. Based on `feat/spec-parity-pr`, so the diff here is this slice alone; it needs a rebase onto main once the PR below it is squash-merged. Verified on macOS at this commit: `cargo fmt --all` clean, `cargo clippy --all-targets --all-features -- -D warnings` clean, `cargo test --all` green.
Four fjord-client-spec requirements: ssh-gpg-keys (commit signature
state), code-browsing (tags and browsing a tag ref), actions-ci
(Actions variables) and labels (organization labels and exclusive
groups).

`fj repo commit list|view` read history at --ref, --branch or --tag and
show each commit's signature state from the `verification` object:
verified with the signer, or nothing when the commit is unsigned. The
SIGNATURE column is dropped when no commit reports one.

`fj repo contents [PATH]` reads a file or directory at a ref. A tag is
pinned to its commit and labelled read-only. `fj browse --tag` opens the
tag route.

`fj label list|create|edit|delete --org ORG` work on organization
labels, with --exclusive and --no-exclusive for `group/name` labels.
Assigning labels on issue and pr create or edit now falls back to the
org's labels for names the repository does not have, and when an
exclusive label displaces a sibling the message is taken from the set
the forge confirms.

`fj label create` and `fj label edit` panicked at parse time on main,
with or without the flag: their `--color` shared an arg id with the
global ANSI `--color`. The label flag is now `--label-color`.

`fj variable set` could not create a variable (PUT only) and a
non-empty `fj variable list` failed to decode, because the model
required a `created_at` the API does not send. `set` now reads, then
PUTs or POSTs, then confirms. The list table is NAME / VALUE / SCOPE and
its JSON follows the ActionVariable shape. Variable values no longer
reach --debug output.
stephen merged commit c98fb7ec34 into feat/spec-parity-pr 2026-10-08 19:42:58 +00:00
stephen deleted branch feat/spec-parity-browse 2026-10-08 19:42:58 +00:00
Sign in to join this conversation.
No description provided.