Problem: picker backend names were hard-coded as string literals in
`picker/init.lua`, `health.lua`, and `init.lua` validation, making
them easy to get out of sync.
Solution: export `backends` and `detect_order` from `forge.picker` and
reference them in health check and config validation instead of
duplicating the name strings.
Problem: docs listed fzf-lua as the only required dependency, and the
health check only verified fzf-lua.
Solution: update requirements to list all three picker backends, add
`picker` config option to vimdoc, update health check to report all
detected backends and mark the active one.
Problem: format functions now return `forge.Segment[]` instead of
strings, so all tests calling `:find()` and `:match()` on results
were failing.
Solution: add `flatten()` helper that concatenates segment text, and
wrap all format assertions with it. Also fix stylua formatting in
`sources_spec.lua`.
Problem: all pickers were tightly coupled to fzf-lua via ANSI strings
and fzf-specific action tables, making it impossible to use telescope
or snacks.nvim.
Solution: introduce `forge.picker` dispatcher with `fzf`, `telescope`,
and `snacks` backends. Format functions now return `forge.Segment[]`
instead of ANSI strings. `pickers.lua` builds backend-agnostic
`forge.PickerEntry[]` and delegates to `forge.picker.pick()`. Backend
auto-detection tries fzf-lua, snacks, telescope in order. Commits,
branches, and worktree pickers remain fzf-only with graceful fallback.
Problem: `nix fmt -- --check .` fails because treefmt uses `--ci`
not `--check`. `bug_report.yaml` had a pre-existing prettier issue.
Solution: use `--ci` flag for treefmt, format `bug_report.yaml`.
Problem: vimdoc did not document per-forge feature differences or
the new capabilities field on the forge interface.
Solution: add COMPATIBILITY section with per-forge feature matrix,
document `capabilities` in the `forge.Forge` interface fields, and
update the source skeleton example.
Problem: forge.nvim silently ignored unsupported features on
non-GitHub forges. Codeberg `pr_for_branch_cmd` blocked all PR
creation, CI picker had zero actions, `repo_info` was hardcoded,
and the compose buffer showed draft/reviewer fields that did nothing.
Solution: add `forge.Capabilities` declaration (`draft`, `reviewers`,
`per_pr_checks`, `ci_json`) to each source. Compose buffer hides
unsupported fields. Per-PR checks falls back to repo-wide CI with
a notification. Fix Codeberg `pr_for_branch_cmd` to filter by branch
via jq, implement `repo_info` and `list_runs_json_cmd` via Gitea API,
add `default_branch_cmd` fallback, and add yank notifications for
GitLab/Codeberg.