Act on single notification threads and mute repositories locally #278

Merged
stephen merged 1 commit from feat/spec-parity-notifications into main 2026-10-08 19:42:27 +00:00
Owner

fj status could only list the inbox and mark all of it read. Three
notifications requirements of the fjord-client-spec were open (#212).

fj status read <ID> sends PATCH /notifications/threads/{id}, treats the
empty 205 as success, then re-reads the thread and only reports success
when the server says it is read. The id comes from a new ID column in the
fj status table.

fj status unsubscribe <ID> resolves the thread's issue or pull request,
deletes the current user's subscription, and marks the thread read. A
repository, commit or otherwise unresolvable thread is refused before any
DELETE or PATCH is sent.

fj status mute|unmute|muted keep a per-account list in muted_repos.toml
next to hosts.toml. Names match case-insensitively. The filter runs on
every fetched page, so --limit still returns that many visible threads,
and --include-muted bypasses it. Muted threads still count toward the
server's unread count, which the help text and a stderr note both say.

--limit above 50 now pages instead of silently clamping.

Covered by unit and wiremock tests only; none of this was run against a live forge. The fj status table gains an ID column, which shifts the columns for anything parsing the table.

First of eight stacked PRs that take the fj column of the fjord-client-spec from 172 to 205 requirements. The other seven sit on this branch in order.

Closes #212

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

`fj status` could only list the inbox and mark all of it read. Three notifications requirements of the fjord-client-spec were open (#212). `fj status read <ID>` sends PATCH /notifications/threads/{id}, treats the empty 205 as success, then re-reads the thread and only reports success when the server says it is read. The id comes from a new ID column in the `fj status` table. `fj status unsubscribe <ID>` resolves the thread's issue or pull request, deletes the current user's subscription, and marks the thread read. A repository, commit or otherwise unresolvable thread is refused before any DELETE or PATCH is sent. `fj status mute|unmute|muted` keep a per-account list in muted_repos.toml next to hosts.toml. Names match case-insensitively. The filter runs on every fetched page, so `--limit` still returns that many visible threads, and `--include-muted` bypasses it. Muted threads still count toward the server's unread count, which the help text and a stderr note both say. `--limit` above 50 now pages instead of silently clamping. Covered by unit and wiremock tests only; none of this was run against a live forge. The `fj status` table gains an `ID` column, which shifts the columns for anything parsing the table. First of eight stacked PRs that take the fj column of the fjord-client-spec from 172 to 205 requirements. The other seven sit on this branch in order. Closes #212 Verified on macOS at this commit: `cargo fmt --all` clean, `cargo clippy --all-targets --all-features -- -D warnings` clean, `cargo test --all` green.
Act on single notification threads and mute repositories locally
All checks were successful
ci / check (pull_request) Successful in 11m33s
ci / live-e2e (pull_request) Successful in 2m23s
ci / coverage (pull_request) Successful in 2m28s
2e829667e6
`fj status` could only list the inbox and mark all of it read. Three
notifications requirements of the fjord-client-spec were open (#212).

`fj status read <ID>` sends PATCH /notifications/threads/{id}, treats the
empty 205 as success, then re-reads the thread and only reports success
when the server says it is read. The id comes from a new ID column in the
`fj status` table.

`fj status unsubscribe <ID>` resolves the thread's issue or pull request,
deletes the current user's subscription, and marks the thread read. A
repository, commit or otherwise unresolvable thread is refused before any
DELETE or PATCH is sent.

`fj status mute|unmute|muted` keep a per-account list in muted_repos.toml
next to hosts.toml. Names match case-insensitively. The filter runs on
every fetched page, so `--limit` still returns that many visible threads,
and `--include-muted` bypasses it. Muted threads still count toward the
server's unread count, which the help text and a stderr note both say.

`--limit` above 50 now pages instead of silently clamping.

Closes #212
stephen deleted branch feat/spec-parity-notifications 2026-10-08 19:42:28 +00:00
Sign in to join this conversation.
No description provided.