Skip to content

start#1

Merged
leonardomso merged 20 commits intomasterfrom
feat/start
Dec 31, 2025
Merged

start#1
leonardomso merged 20 commits intomasterfrom
feat/start

Conversation

@leonardomso
Copy link
Copy Markdown
Owner

No description provided.

- 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
@leonardomso leonardomso self-assigned this Dec 31, 2025
@leonardomso leonardomso merged commit c24b988 into master Dec 31, 2025
0 of 2 checks passed
@leonardomso leonardomso deleted the feat/start branch December 31, 2025 22:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant