<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror, branch v2.4.3</title>
<subtitle>Personal mirror of DanConwayDev/ngit-cli on git.upleb.uk
</subtitle>
<id>https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/atom?h=v2.4.3</id>
<link rel='self' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/atom?h=v2.4.3'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/'/>
<updated>2026-05-01T20:31:08+00:00</updated>
<entry>
<title>chore: release v2.4.3</title>
<updated>2026-05-01T20:31:08+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-05-01T20:31:08+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=e8c3c49b5bbac43cd1497c2593198d19fe506073'/>
<id>urn:sha1:e8c3c49b5bbac43cd1497c2593198d19fe506073</id>
<content type='text'>
Filter run_list state event candidates by the current remote's
maintainers to prevent cross-remote state contamination when
multiple nostr:// remotes share the same identifier.
</content>
</entry>
<entry>
<title>fix: filter run_list state candidates by current remote's maintainers</title>
<updated>2026-05-01T20:28:19+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-05-01T20:20:18+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=dae4e06a9a1b221986d0ba1a8b875d0a3ca33f8e'/>
<id>urn:sha1:dae4e06a9a1b221986d0ba1a8b875d0a3ca33f8e</id>
<content type='text'>
when a repo has multiple nostr:// remotes sharing the same identifier,
relays can return state events authored by maintainers of the other
remote. without filtering, the newest event wins regardless of author,
pointing refs at the wrong commits.

state event candidates in run_list are now filtered to maintainers of
the current remote's repo announcement.
</content>
</entry>
<entry>
<title>chore: release v2.4.2</title>
<updated>2026-04-28T10:48:50+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-28T10:48:50+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=59e467b423e0ba66c30c7f1b7d41d47d938615de'/>
<id>urn:sha1:59e467b423e0ba66c30c7f1b7d41d47d938615de</id>
<content type='text'>
Fix GRASP server push path for PR proposals: URL normalisation
mismatch meant repo GRASP servers were never tried, causing every
PR submission to fall through to the fork-creation fallback.
</content>
</entry>
<entry>
<title>fix(send): repo GRASP servers never tried when pushing PR proposal refs</title>
<updated>2026-04-28T08:49:27+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-28T08:49:27+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=b9b0108972cbe532d41519850245adbcf6b4fd93'/>
<id>urn:sha1:b9b0108972cbe532d41519850245adbcf6b4fd93</id>
<content type='text'>
is_grasp_server_in_list does a direct string comparison, but repo_grasps
(from grasp_servers()) contains normalised hostnames (e.g. relay.ngit.dev)
while repo_ref.git_server holds full clone URLs. They never match, so
to_try was always empty and every PR submission fell through to the fork
creation / personal GRASP server fallback path.

Fix: normalise each clone URL before comparing against repo_grasps.
</content>
</entry>
<entry>
<title>chore: release v2.4.1</title>
<updated>2026-04-22T13:00:23+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-22T13:00:23+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=875f4e0a99688c7363cba69c1485af1cd4b34999'/>
<id>urn:sha1:875f4e0a99688c7363cba69c1485af1cd4b34999</id>
<content type='text'>
Fix fatal errors during clone/fetch when an open PR's git data is
unavailable on the repository's specified git servers.
</content>
</entry>
<entry>
<title>fix: prevent fatal clone/fetch errors when PR git data unavailable</title>
<updated>2026-04-22T13:00:17+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-22T13:00:17+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=e98acf8c5da5033b20aee8510485a8b4a4f4a56e'/>
<id>urn:sha1:e98acf8c5da5033b20aee8510485a8b4a4f4a56e</id>
<content type='text'>
Only advertise `refs/heads/pr/*` branches once their tip OIDs are
confirmed present locally; prevents `fatal: bad object` / `remote did
not send all necessary objects` errors during clone/fetch when a PR tip
lives on a different git server than the one that won the bulk prefetch
race.

After the bulk prefetch, collect remaining missing PR tip OIDs and do
one batch fetch per repo git server using only the OIDs that server has
advertised; break early once all are satisfied and skip servers that
carry none. Avoids batch-poisoning (a server rejects the whole request
if any single OID is absent) and redundant connections.

Restrict mop-up fetches and run_fetch to the repo's declared git
servers; do not fetch from clone-tag URLs in PR events - they are
submitter-supplied and could let a malicious or slow server stall every
clone/fetch operation.

Also apply rustfmt and fix clippy warnings.
</content>
</entry>
<entry>
<title>chore: release v2.4.0</title>
<updated>2026-04-10T20:46:02+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-10T20:45:06+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=205ca05897cbc727d9b75e7ab68375b5c93ead39'/>
<id>urn:sha1:205ca05897cbc727d9b75e7ab68375b5c93ead39</id>
<content type='text'>
Add git worktree support and fix patch parsing, panic on bare npub clone,
percent-encoding of reserved characters in identifiers, and push errors.
</content>
</entry>
<entry>
<title>fix: percent-encode identifier in nostr:// URLs and GRASP HTTP paths</title>
<updated>2026-04-10T16:30:02+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-04-10T16:25:26+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=47622eb762e802a9caa2f37d8162eaaf2f9aa9ca'/>
<id>urn:sha1:47622eb762e802a9caa2f37d8162eaaf2f9aa9ca</id>
<content type='text'>
Repository identifiers can contain any characters per NIP-01 d-tag rules.
Encode them in nostr:// clone URLs (display and parse) and in GRASP
/&lt;npub&gt;/&lt;identifier&gt;.git paths, aligning with NIP-34 and GRASP-01.
</content>
</entry>
<entry>
<title>docs: update changelog with fixes since v2.3.0</title>
<updated>2026-03-30T16:29:24+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-03-30T12:24:21+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=1978add2aa61a7e65655ec023d339e656402ad7b'/>
<id>urn:sha1:1978add2aa61a7e65655ec023d339e656402ad7b</id>
<content type='text'>
- more robust patch parsing and gracefully handle errors
- panic when cloning a bare `nostr://npub/identifier` URL with no relay hints
</content>
</entry>
<entry>
<title>feat: git worktree support</title>
<updated>2026-03-30T16:29:23+00:00</updated>
<author>
<name>m0wer</name>
<email>m0wer@sgn.space</email>
</author>
<published>2026-03-29T14:45:52+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1sh4dwqc9ypguemh6m8tmxxl8xuzfsz0j8av8vq7t3xd3mldsg9ls4ew80h/ngit-cli-mirror/commit/?id=820fd706a24be7a58554a27e411e120cfa28d9a6'/>
<id>urn:sha1:820fd706a24be7a58554a27e411e120cfa28d9a6</id>
<content type='text'>
Git worktrees don't have a .git directory with a parent, so we need to
look for the git dir via git2's Repository::discover() and then look for
the cache database there. This allows the client to work correctly when
run from a worktree, and also allows the cache database to be shared
between the main repo and its worktrees (since they share the same git
dir and thus the same cache path).
</content>
</entry>
</feed>
