Releases: remenoscodes/git-native-issue
v1.3.3
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
b4fb6f48e7aff280c624e93741f0337c3cdc8011fde37769602609a7aa7c9bf5
v1.3.2
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
40b1cb3f92c457452e201e23e7327d53896bba1c09da8519467c7f402f35075e
v1.3.1
What's Changed
Installation
Homebrew (macOS/Linux)
brew install remenoscodes/git-native-issue/git-native-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
8848a70eb146d6f9695a4b78e8d36804026d95ab77658682b3e343c82440a5d1
v1.3.0
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
329e77b6266bec3f62103eb8dd580e0620b99c0583b908cdb57bceee318fbe71
v1.2.2 - Fix init remote coupling
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
-
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.)
-
Unclear messaging about init being optional
- Users might assume init is required
- No documentation explaining core commands work without init
-
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,forkAfter:
$ 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 fork2. 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 automaticallyInit is 100% OPTIONAL — all core commands work without it.
Changes Made
Modified files:
bin/git-issue-init(+64 lines) - Auto-detection logicbin/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-issueInstall from Source
git clone https://github.com/remenoscodes/git-native-issue.git
cd git-native-issue
git checkout v1.2.2
make installVerify 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 originstill 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
- README.md - Full documentation
- CHANGELOG.md - Complete changelog
- ISSUE-FORMAT.md - Format specification
🐛 Reporting Issues
Found a bug? Please report it:
- GitHub: https://github.com/remenoscodes/git-native-issue/issues
- Use git-native-issue itself:
git issue create "Bug: ..." -l bug
Previous release: v1.2.1 - Gitea/Forgejo bridge fixes
Next release: TBD
🚀 Happy distributed issue tracking!
v1.2.1
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 abc1232. 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.1Via install script:
cd /path/to/git-native-issue
git pull
sudo make installWhat 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 scriptsbin/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 fixesRELEASE-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
- Project: https://github.com/remenoscodes/git-native-issue
- Installation:
brew install remenoscodes/git-native-issue/git-native-issue - Documentation: See README.md, QUICKSTART.md, docs/
- Report Issues: https://github.com/remenoscodes/git-native-issue/issues
Next Steps After Upgrading
- Test your workflows - existing imports/exports continue to work
- Try label auto-creation - export to Gitea with labels
- Import public repos - no token needed for public Gitea/Forgejo repos
- Use dry-run - test exports safely without credentials
- Check error messages - now actually helpful for debugging
Thank you for using git-native-issue! 🎉
v1.2.0
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
7392cbd3359b4bbb909e7451b69034a9203f6acbdea8ec505c1bf72feacb3b92
v1.1.0
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
fe66c2eb4894e5bf451f48739a5d83363716498a59e4396d3c281682364cb80f
v1.0.3
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-issueInstall 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 installFrom 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=~/.localVerification
git issue versionSHA256
e02cdb15cbc69146cb5fe973b273a0e59fd167c980f6fe1ea642f86abf3bd0d7
v1.0.2 - Bidirectional Comment Sync & Critical Bug Fix
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