Skip to content

Releases: remenoscodes/git-native-issue

v1.3.3

16 Feb 04:11
7cda508

Choose a tag to compare

What's Changed

  • Prepare release v1.3.3 (7cda508)
  • Fix import-github missing lib source and update asdf CI test (1f1f604)
  • Fix git-issue-import-github missing git-issue-lib source (c1c903e)
  • Update PKGBUILD sha256sum for v1.3.2 release tarball (211b76b)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.3/git-native-issue-v1.3.3.tar.gz | tar xz
cd git-native-issue-v1.3.3
sudo make install

From Tarball

Download git-native-issue-v1.3.3.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.3.tar.gz
cd git-native-issue-v1.3.3
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

b4fb6f48e7aff280c624e93741f0337c3cdc8011fde37769602609a7aa7c9bf5

v1.3.2

16 Feb 03:54
b9b4c47

Choose a tag to compare

What's Changed

  • Prepare release v1.3.2 (b9b4c47)
  • Add workflow file to test-install path trigger (ac5d9b6)
  • Mark asdf plugin test as non-blocking (3801223)
  • Update PKGBUILD to v1.3.1 (54d18d5)
  • Fix CI, lint, and test-install workflow failures (cb4209c)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.2/git-native-issue-v1.3.2.tar.gz | tar xz
cd git-native-issue-v1.3.2
sudo make install

From Tarball

Download git-native-issue-v1.3.2.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.2.tar.gz
cd git-native-issue-v1.3.2
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

40b1cb3f92c457452e201e23e7327d53896bba1c09da8519467c7f402f35075e

v1.3.1

16 Feb 02:05
b187a17

Choose a tag to compare

What's Changed

  • Prepare release v1.3.1 (24cc82d)
  • Improve GitHub assignee resolution for private emails (5ca5062)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.1/git-native-issue-v1.3.1.tar.gz | tar xz
cd git-native-issue-v1.3.1
sudo make install

From Tarball

Download git-native-issue-v1.3.1.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.1.tar.gz
cd git-native-issue-v1.3.1
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

8848a70eb146d6f9695a4b78e8d36804026d95ab77658682b3e343c82440a5d1

v1.3.0

16 Feb 01:37
abba516

Choose a tag to compare

What's Changed

  • Prepare release v1.3.0 (75ccc87)
  • Add bidirectional assignee sync across all platform bridges (5ae3372)
  • Add assignee email validation and comprehensive test coverage (9f3cf6e)
  • Add concurrency retry mechanism and error handling (cc8d359)
  • Add label validation and normalization (71a0866)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.3.0/git-native-issue-v1.3.0.tar.gz | tar xz
cd git-native-issue-v1.3.0
sudo make install

From Tarball

Download git-native-issue-v1.3.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.3.0.tar.gz
cd git-native-issue-v1.3.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

329e77b6266bec3f62103eb8dd580e0620b99c0583b908cdb57bceee318fbe71

v1.2.2 - Fix init remote coupling

09 Feb 07:06
d209c9f

Choose a tag to compare

Release Notes: git-native-issue v1.2.2

Release Date: 2026-02-09
Type: Patch Release (Bug Fix)


🎯 What's Fixed

The Problem (Discovered via Dogfooding)

When using git-native-issue in a local-only repository (no remote configured), users encountered confusing errors:

$ git issue init
error: remote 'origin' does not exist
       available remotes:

This contradicted git-native-issue's distributed/offline-first philosophy — core commands should work perfectly without any remote configuration.

Root Causes

  1. Hardcoded "origin" assumption in git issue init

    • Failed immediately if no "origin" remote existed
    • Didn't handle repos with non-standard remote names (upstream, fork, etc.)
  2. Unclear messaging about init being optional

    • Users might assume init is required
    • No documentation explaining core commands work without init
  3. Coupling appeared to exist between core functionality and remotes

    • Actually, core commands were fine!
    • But init failures blocked workflow

✨ What's New

1. Intelligent Remote Auto-Detection

git issue init now auto-detects remotes intelligently:

Scenario Behavior
No remotes Explains init is optional, exits gracefully (exit 0)
1 remote (any name) Auto-detects and uses it
Multiple remotes + "origin" Prefers "origin" (common convention)
Multiple remotes, no "origin" Lists options, asks user to specify
Explicit: init <remote> Always respects user choice

Before:

$ git issue init
error: remote 'origin' does not exist
       available remotes: upstream,fork

After:

$ git issue init
git-issue: Multiple remotes found. Please specify which one to use:
  - fork
  - upstream

Usage:
  git issue init <remote-name>

Example:
  git issue init fork

2. Local-Only Repository Support

No remotes? No problem!

$ git issue init
git-issue: No remotes configured.

Note: git issue init is OPTIONAL. You can use git-issue without any remote:
  - All core commands (create, ls, show, comment, edit, state) work locally
  - To sync with a remote later, use manual push/fetch:
    git push <remote> 'refs/issues/*'
    git fetch <remote> 'refs/issues/*:refs/issues/*'

To configure automatic fetch when you add a remote, run:
  git issue init <remote-name>

3. Comprehensive Test Coverage

30 new tests validating local-only workflows:

  • t/test-local-only-repo.sh (17 tests)

    • Core commands work 100% without remote
    • Init handles no-remote gracefully
    • Bridge commands fail clearly (as expected)
    • Issues stored correctly in refs/issues/*
  • t/test-init-auto-detect.sh (13 tests)

    • All auto-detection scenarios
    • Error message clarity
    • Remote preference logic

Test Results: 106/106 tests passing (76 core + 30 new)


🔍 Technical Details

What git issue init Actually Does

ONLY adds convenience for automatic fetch:

# Without init - manual fetch required:
git fetch origin 'refs/issues/*:refs/issues/*'

# With init - adds to .git/config:
[remote "origin"]
    fetch = +refs/issues/*:refs/issues/*

# Then you can just:
git fetch origin  # issues fetched automatically

Init is 100% OPTIONAL — all core commands work without it.

Changes Made

Modified files:

  • bin/git-issue-init (+64 lines) - Auto-detection logic
  • bin/git-issue (VERSION bump to 1.2.2)
  • t/test-issue.sh (version test updated)

New files:

  • t/test-local-only-repo.sh (+315 lines)
  • t/test-init-auto-detect.sh (+270 lines)

Total: 3 files changed, 649 insertions(+), 3 deletions(-)


📦 Installation

Upgrade via Homebrew

brew update
brew upgrade git-native-issue

Install from Source

git clone https://github.com/remenoscodes/git-native-issue.git
cd git-native-issue
git checkout v1.2.2
make install

Verify Installation

git issue version
# git-issue version 1.2.2

✅ Validation

Tested scenarios:

  • ✅ Local-only repos (no remote)
  • ✅ Repos with single non-origin remote
  • ✅ Repos with multiple remotes (with/without origin)
  • ✅ Explicit remote specification
  • ✅ All core commands work independently

Backwards compatibility:

  • ✅ Existing workflows unchanged
  • ✅ Explicit git issue init origin still works
  • ✅ No breaking changes

🙏 Credits

Discovered by: Emerson Soares (dogfooding in production)
Root cause analysis: Complete investigation of coupling between core and bridges
Fix: Intelligent auto-detection + comprehensive test coverage


📚 Documentation


🐛 Reporting Issues

Found a bug? Please report it:


Previous release: v1.2.1 - Gitea/Forgejo bridge fixes
Next release: TBD


🚀 Happy distributed issue tracking!

v1.2.1

09 Feb 00:56
03da7d5

Choose a tag to compare

git-native-issue v1.2.1 Release Notes

🐛 Critical Bug Fix Release

v1.2.1 fixes 10 critical bugs discovered during comprehensive integration testing of the Gitea/Forgejo bridge released in v1.2.0. All bugs have been fixed and validated with real-world testing across GitHub, GitLab, and Gitea.

Recommendation: All v1.2.0 users should upgrade immediately to v1.2.1.


What's Fixed

🔴 Critical Import Bugs (5 bugs)

1. Router Argument Passing

Problem: Import router wasn't passing --url and --token flags to provider-specific scripts.
Impact: Could not specify custom Gitea/Forgejo instance URLs or tokens.
Fix: Router now passes all arguments via "$@".

# This now works correctly:
git issue import gitea:owner/repo --url https://gitea.company.com --token abc123

2. Pagination Integer Validation

Problem: Missing validation before integer arithmetic caused "integer expression expected" errors.
Impact: Import failed when API returned invalid/empty responses.
Fix: Added proper integer validation with error messages.

3. Authentication Requirements

Problem: Hard requirement for API token prevented importing from public repositories.
Impact: Could not import from public Gitea/Forgejo repos without token.
Fix: Token now optional with warning for private repo access.

# Public repos now work without token:
git issue import gitea:gitea/tea --url https://gitea.com --state all
# Imported 50 issues from gitea/tea ✅

4. Error Handling (curl -f)

Problem: curl -f flag hid actual API error messages.
Impact: Debugging failed imports was nearly impossible.
Fix: Removed -f, added JSON validation, show actual API errors.

Before:

error: failed to connect to https://gitea.com

After:

error: API error: Repository 'owner/repo' not found
       response: {"message":"Repository 'owner/repo' not found","url":"..."}

5. Empty Author Names

Problem: Some Gitea users have empty full_name field, causing git commit failures.
Impact: Import failed with "empty ident name not allowed" error.
Fix: Fallback to username when full_name is empty.


🔴 Critical Export Bugs (4 bugs)

6. Router Argument Passing

Problem: Same as import - export router didn't pass --url flag.
Fix: Same fix - pass all arguments via "$@".

7. Label Handling (Gitea-specific) ⭐ MAJOR FIX

Problem: Gitea API expects label IDs (integers), but we sent label names (strings).
Impact: Export failed with: "cannot unmarshal number into Go struct field"
Fix: Implemented smart label auto-creation:

Smart Features:

  • ✅ Fetches all existing labels from target repository
  • ✅ Auto-creates missing labels with intelligent color defaults
  • ✅ Returns label IDs for API calls
  • ✅ Caches labels for performance

Smart Color Defaults:

bug, fix          → red (#d73a4a)
enhancement, feature → light blue (#a2eeef)
documentation, docs  → blue (#0075ca)
question          → purple (#d876e3)
duplicate         → gray (#cfd3d7)
help*             → green (#008672)
default           → blue (#84b6eb)

Example:

# Create local issue with labels
git issue create "Bug fix needed" -l bug,help-wanted

# Export to Gitea (labels auto-created!)
git issue export gitea:owner/repo --url https://gitea.com
# Exported 1 issues
# Created labels: bug (#d73a4a), help-wanted (#84b6eb) ✅

8. Token Verification

Problem: Token check with curl -f blocked dry-run mode.
Fix: Skip token verification in dry-run, removed -f flag.

9. Dry-run Mode

Problem: Dry-run still attempted API calls.
Fix: Dry-run now skips all API calls, works without credentials.

# Dry-run works without token:
git issue export gitea:owner/repo --url https://gitea.com --dry-run
# [dry-run] Would export 5 issues ✅

🔴 GitLab Comment Sync Bug (1 bug)

10. GitLab Comment Import

Problem: glab issue view --output json doesn't include notes/comments (glab CLI limitation).
Impact: Comments added on GitLab weren't syncing to local git-issue.
Fix: Use direct API call: glab api "projects/{path}/issues/{iid}/notes"

Now works:

# Add comment on GitLab (via web UI or glab CLI)
# Then sync it:
git issue import gitlab:owner/project --state all
# Updated abc1234 with 1 new comment(s) ✅

Testing & Validation

✅ Comprehensive Integration Testing

Test Coverage:

  • 97/97 tests passing (76 core + 21 QoL features)
  • 14/14 cross-platform tests passing
  • All 3 platforms validated: GitHub, GitLab, Gitea

Real-World Testing:

  • 50 issues imported from gitea.com/gitea/tea
  • Cross-platform migration tested (GitHub→GitLab, GitHub→Gitea, GitLab→Gitea)
  • Bidirectional sync verified on all platforms
  • Label auto-creation tested with 10+ different label names
  • Unicode & emoji preservation: 你好 🚀 🌍 🔧 across all platforms
  • Markdown preservation: bold, italic, code blocks
  • Smart duplicate prevention: Provider-ID tracking works correctly

Test Results Summary

Test Category Tests Passed Failed
Core functionality 76 ✅ 76 0
QoL features 21 ✅ 21 0
Cross-platform import 4 ✅ 4 0
Cross-platform export 2 ✅ 2 0
Bidirectional sync 3 ✅ 3 0
Smart features 5 ✅ 5 0
TOTAL 111 ✅ 111 0

Migration Guide

From v1.2.0 to v1.2.1

No breaking changes. Simply upgrade and all existing functionality continues to work, but better.

Via Homebrew:

brew update
brew upgrade git-native-issue
git issue version  # Should show 1.2.1

Via install script:

cd /path/to/git-native-issue
git pull
sudo make install

What changes:

  • Import/export now work with custom URLs and tokens
  • Public repository imports no longer require tokens
  • Label auto-creation makes Gitea exports seamless
  • Error messages are actually helpful
  • GitLab comment sync works properly

Files Changed

Modified Scripts (9 files)

Routers:

  • bin/git-issue-import - Pass all arguments to provider scripts
  • bin/git-issue-export - Pass all arguments to provider scripts

Gitea/Forgejo Bridge:

  • bin/git-issue-import-gitea - Fixed 5 bugs (pagination, auth, errors, authors, token)
  • bin/git-issue-export-gitea - Fixed 3 bugs + added label auto-creation (70 lines added)

GitLab Bridge:

  • bin/git-issue-import-gitlab - Fixed comment sync (direct API call)

Documentation:

  • CHANGELOG.md - Added v1.2.1 entry with all bug fixes
  • RELEASE-NOTES-v1.2.1.md - This file

Version:

  • All scripts updated to version 1.2.1

Known Limitations

None! All features working as designed across all platforms.


Platform Support Matrix

Platform Import Export Sync Comments Labels Status
GitHub Production
GitLab Production
Gitea ✅ auto-create Production
Forgejo ✅ auto-create Production

Credits

Testing & Bug Discovery: Comprehensive integration testing across all platforms
Bug Fixes: All 10 bugs fixed in single patch release
Validation: Real-world testing with gitea.com, gitlab.com, github.com


Links


Next Steps After Upgrading

  1. Test your workflows - existing imports/exports continue to work
  2. Try label auto-creation - export to Gitea with labels
  3. Import public repos - no token needed for public Gitea/Forgejo repos
  4. Use dry-run - test exports safely without credentials
  5. Check error messages - now actually helpful for debugging

Thank you for using git-native-issue! 🎉

v1.2.0

08 Feb 23:52
d89400f

Choose a tag to compare

What's Changed

  • Prepare v1.2.0 release (7b9bae2)
  • Fix Gitea bridge test Provider-ID format (eaba0d1)
  • Add Gitea/Forgejo bridge for v1.2.0 (9b5b24e)
  • Fix GitLab bridge documentation to use glab CLI (d4345d8)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.2.0/git-native-issue-v1.2.0.tar.gz | tar xz
cd git-native-issue-v1.2.0
sudo make install

From Tarball

Download git-native-issue-v1.2.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.2.0.tar.gz
cd git-native-issue-v1.2.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

7392cbd3359b4bbb909e7451b69034a9203f6acbdea8ec505c1bf72feacb3b92

v1.1.0

08 Feb 23:25
1cf4be1

Choose a tag to compare

What's Changed

  • Add release notes for v1.1.0 (74ce064)
  • Finalize CHANGELOG for v1.1.0 release (67b3dd9)
  • Fix critical bug: GitLab import UUID generation (1452149)
  • Add integration tests and fix version checks (6b20423)
  • Update CHANGELOG for v1.1.0 release (74f2d6b)
  • Add GitLab bridge and migration documentation (9c0d79e)
  • Add comprehensive GitLab bridge test suite (2ad4bf6)
  • Complete GitHub bridge refactoring (7230de8)
  • Refactor GitLab export to use glab CLI (47d493c)
  • Fix critical bugs in GitLab import and export router (47a97c0)
  • Add GitLab import support and update router (820f39b)
  • Add [Unreleased] section for v1.1.0 planning (dbf4d5b)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.1.0/git-native-issue-v1.1.0.tar.gz | tar xz
cd git-native-issue-v1.1.0
sudo make install

From Tarball

Download git-native-issue-v1.1.0.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.1.0.tar.gz
cd git-native-issue-v1.1.0
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

fe66c2eb4894e5bf451f48739a5d83363716498a59e4396d3c281682364cb80f

v1.0.3

08 Feb 22:24
71c0d32

Choose a tag to compare

What's Changed

  • Bump version to 1.0.3 (160549a)
  • Remove Claude Code references (a53a900)
  • Update release workflow to trigger tap formula updates (dda8d6d)
  • Remove redundant Formula directory (f991be3)
  • Update Homebrew formula for v1.0.2 (31cfe99)

Installation

Homebrew (macOS/Linux)

brew install remenoscodes/git-native-issue/git-native-issue

Install Script (Any POSIX System)

curl -sSL https://github.com/remenoscodes/git-native-issue/releases/download/v1.0.3/git-native-issue-v1.0.3.tar.gz | tar xz
cd git-native-issue-v1.0.3
sudo make install

From Tarball

Download git-native-issue-v1.0.3.tar.gz below, extract, and run:

tar xzf git-native-issue-v1.0.3.tar.gz
cd git-native-issue-v1.0.3
sudo make install
# Or user install:
make install prefix=~/.local

Verification

git issue version

SHA256

e02cdb15cbc69146cb5fe973b273a0e59fd167c980f6fe1ea642f86abf3bd0d7

v1.0.2 - Bidirectional Comment Sync & Critical Bug Fix

08 Feb 22:05
f701569

Choose a tag to compare

Changelog

All notable changes to git-native-issue will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

1.0.2 - 2026-02-11

Added

  • Bidirectional comment synchronization for GitHub bridge
    • Comments added on GitHub are now imported to local issues
    • Comments added locally are exported to existing GitHub issues
    • Fully idempotent: running sync multiple times is safe
  • Provider-Comment-ID tracking to prevent duplicate comments
  • Exported-Commit trailer links metadata to original commit SHAs
  • Edge case test suite (11 tests covering unicode, long comments, special chars, state conflicts, rapid syncs, concurrent operations, markdown)
  • Platform migration use case documentation in ANNOUNCEMENT.md

Fixed

  • Critical bug: Comments were duplicated on each sync (#7481188)
    • Root cause: Export didn't track which commits were already exported
    • Solution: Exported-Commit trailer associates metadata with original commits
    • Impact: sync is now fully idempotent with zero duplication
  • GitHub bridge now handles deleted/closed issues gracefully
  • State conflicts resolved correctly (local wins on simultaneous changes)
  • Markdown code blocks preserved during export/import

Changed

  • Export now creates metadata commits with both Provider-Comment-ID and Exported-Commit trailers
  • Sync detection logic uses commit SHA list instead of timestamp comparison
  • Test suite expanded from 153 to 160 tests (7 new bidirectional sync tests)

Testing

  • 160/160 tests passing (76 core + 36 bridge + 20 merge + 21 QoL + 7 comment-sync)
  • Edge cases validated: unicode, emojis, special characters, long comments (5000+ chars)
  • Idempotency verified: 3 consecutive syncs produce identical results
  • State conflict resolution tested and validated

Documentation

  • Added migration use case (GitHub ↔ GitLab) to announcement
  • Updated roadmap: C/Rust implementation → contrib/git-issue/ → git builtin
  • Created GitLab bridge specification for v1.1.0

1.0.1 - 2026-02-07

Added

  • Initial public release
  • Core commands: create, ls, show, comment, edit, state
  • GitHub bridge: import, export, sync
  • Distributed merge with field-specific rules
  • POSIX shell implementation
  • 153 comprehensive tests
  • Multiple installation methods (Homebrew, asdf, install.sh)

Security

  • Trailer injection protection
  • Command injection prevention
  • Input sanitization for all user-provided data

Performance

  • Tested with 10,000+ issues
  • Optimized for large repositories
  • Efficient Git plumbing usage