start#1
Merged
leonardomso merged 20 commits intomasterfrom Dec 31, 2025
Merged
Conversation
- Add Cobra CLI with 'check' and 'interactive' commands - Add scanner package to find markdown files in directories - Add parser package to extract HTTP/HTTPS URLs using regex - Add checker package with concurrent HTTP requests using goroutines - Implement text and JSON output formats for CI/scripting - Build Bubble Tea interactive TUI with real-time progress - Support navigation through dead link results in TUI mode
- Configure context7 and github MCP servers in opencode.jsonc - Add CLAUDE.md with project overview, goals, and conventions
Add comprehensive conventional commits documentation including: - Critical rules for when to commit - Pre-commit checklist - Commit message format and structure rules - Writing style guidelines - Scope names specific to Gone project - Practical examples for different commit types
…gci-lint config - Add worker pool pattern for bounded concurrency (default: 10 workers) - Implement retry logic with exponential backoff and jitter - Add HEAD to GET fallback for servers that reject HEAD requests - Configure optimized HTTP client with connection pooling and TLS 1.2+ - Use crypto/rand instead of math/rand for secure random jitter - Add checker options with fluent builder pattern (WithConcurrency, etc.) - Extract result types to separate file with filter helpers - Add comprehensive golangci-lint v2 configuration with revive - Enable gocritic, gosec, godot, unparam, and other quality linters - Fix all lint issues across codebase (comments, imports, security) - Add CLI flags: --concurrency, --timeout, --retries The checker now properly bounds resource usage and handles transient failures gracefully while maintaining high throughput.
- Create internal/ui/ package with separated concerns: - app.go: main model, state machine, Update/View logic - styles.go: lipgloss styles and color palette - keys.go: key bindings with bubbles/key, implements help.KeyMap - messages.go: custom Bubble Tea message types - commands.go: tea commands for scanning, extracting, checking - item.go: ResultItem implementing list.Item interface - Slim cmd/interactive.go from 375 to ~45 lines - Add new features: - Filter cycling (f key): All -> Errors -> 4xx -> 5xx -> 3xx - Help toggle (? key) using bubbles/help - Path argument support: gone interactive [path] - Alt screen mode for cleaner terminal experience - bubbles/list integration with scrolling and filtering - Add examples/ folder with test markdown file
…atus categories Major enhancements to link checking: - Add 6 link status categories: Alive, Redirect, Blocked, Dead, Error, Duplicate - Follow redirect chains (up to 10 hops) and verify final destination - Retry 403 responses with browser-like headers to bypass bot detection - Deduplicate URLs before checking (check once, report all occurrences) - Track and display full redirect chain with status codes CLI improvements: - New filter flags: --all, --alive, --warnings, --dead - Sectioned output with notes explaining each status - Exit code 0 for warnings-only, 1 for dead links - JSON output includes redirect chains and duplicate references TUI improvements: - New filters: All Issues -> Warnings -> Dead -> Duplicates - Live categorized counts during checking (alive/warnings/dead) - Detail panel showing redirect chain and status notes - Color-coded status badges This properly handles the common case where 301 redirects lead to working pages - these are now warnings, not dead links.
- Add modernize, errcheck, and errorlint to golangci-lint config - Use WaitGroup.Go() instead of manual Add(1)/Done() pattern - Use min()/max() built-ins instead of if statements - All lints pass with new stricter configuration
- Modify ExtractLinks to iterate line-by-line instead of whole-file regex - Track 1-indexed line numbers for each extracted URL - Update CLI output to display file:line format (e.g., README.md:317) - Format is clickable in most terminals/editors
…pport - Add internal/config package for .gonerc.yaml configuration loading - Add internal/filter package with domain, glob, and regex filtering - Domain matching includes subdomains automatically - Add --ignore-domain, --ignore-pattern, --ignore-regex flags - Add --show-ignored flag to display filtered URLs - Add --no-config flag to skip config file loading - Update summary to show ignored count - Support filtering in both CLI and TUI modes New dependencies: gobwas/glob, gopkg.in/yaml.v3
…raction - Rewrite parser to use goldmark AST for proper markdown parsing - Extract link text for display (truncated to 50 chars in CLI) - Add LinkType enum: inline, reference, image, autolink, html - Skip URLs inside code blocks (fenced and indented) - Support reference-style links with definition tracking - Parse HTML <a> tags in markdown files - Add Text field to checker.Link for downstream display - Update CLI and TUI to show link text alongside URLs New dependency: github.com/yuin/goldmark
…, Markdown) Add internal/output package with formatters for various output formats: - JSON: structured output for automation - YAML: human-readable structured output - XML: generic XML format - JUnit XML: CI/CD integration (only reports failures/errors) - Markdown: formatted reports with tables and details Features: - --format flag for stdout output in specified format - --output flag for file output (format inferred from extension) - Mutually exclusive flags with clear error message - Full redirect chain details in all formats - Ignored URLs section when --show-ignored is used
Add new 'gone fix' command that automatically updates redirect URLs to their final destinations in markdown files. Features: - Interactive mode (default): prompts y/n/a/q for each file - Automatic mode (--yes): applies all fixes without prompting - Dry-run mode (--dry-run): preview changes without modifying - Reference link support: fixes definition line, shows usage count - Duplicate handling: fixes all occurrences, shows count Only redirects with final status 200 are considered fixable. Dead links, errors, and blocked URLs are not modified. New files: - cmd/fix.go: Cobra command and CLI logic - internal/fixer/fixer.go: Core URL replacement logic
Add unit tests achieving high coverage across core packages: - checker: 97.0% (redirect handling, blocked sites, HTTP fallbacks) - config: 100.0% (YAML loading, directory traversal, merging) - filter: 100.0% (domain, glob, and regex URL filtering) - fixer: 98.1% (redirect URL replacement, preview, apply) - output: 98.8% (JSON, YAML, XML, JUnit, Markdown formatters) - parser: 94.1% (goldmark link extraction, edge cases) - scanner: 100.0% (markdown file discovery, hidden dirs) Include testdata files for parser, scanner, and config packages.
- test.yml: runs go test ./... -cover on push/PR to master - lint.yml: runs golangci-lint on push/PR to master Both use Go 1.25.5 on ubuntu-latest.
- Update module path to github.com/leonardomso/gone for go install - Add --version flag with GoReleaser ldflags injection - Create comprehensive README with installation, usage, and CI examples - Add .goreleaser.yaml for automated binary releases - Add release.yml workflow to trigger GoReleaser on tags - Update all internal import paths to use new module path
- Add engaging opening description - Expand feature list with conversational, human-friendly descriptions - Add Table of Contents for easier navigation - Add placeholders for logo and demo GIF - Add Download Binary installation option - Reorganize badges placement
- Add header image (github-image.png) - Add 'Default' column to all flag tables - Add 'Link Status Types' table explaining Alive, Dead, Redirect, etc. - Add 'gone completion' section with shell setup examples - Expand interactive controls table with all keybindings - Add new 'Reference' section with Commands Overview and Flags Reference tables - Update Table of Contents with new sections - Add missing '--alive' flag to check command documentation
- Add release-please.yml workflow to create Release PRs on merge to master - Add release-please-config.json with changelog sections for conventional commits - Add .release-please-manifest.json starting at version 0.1.0 - Add CHANGELOG.md with initial 0.1.0 release summary Release Please will automatically: - Parse conventional commit messages (feat:, fix:, etc.) - Create/update Release PRs with version bumps - Generate changelog entries - Create git tags when Release PRs are merged - Trigger GoReleaser to build and publish binaries
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.