Files
gibidify/CLAUDE.md
Ismo Vuorinen 95b7ef6dd3 chore: modernize workflows, security scanning, and linting configuration (#50)
* build: update Go 1.25, CI workflows, and build tooling

- Upgrade to Go 1.25
- Add benchmark targets to Makefile
- Implement parallel gosec execution
- Lock tool versions for reproducibility
- Add shellcheck directives to scripts
- Update CI workflows with improved caching

* refactor: migrate from golangci-lint to revive

- Replace golangci-lint with revive for linting
- Configure comprehensive revive rules
- Fix all EditorConfig violations
- Add yamllint and yamlfmt support
- Remove deprecated .golangci.yml

* refactor: rename utils to shared and deduplicate code

- Rename utils package to shared
- Add shared constants package
- Deduplicate constants across packages
- Address CodeRabbit review feedback

* fix: resolve SonarQube issues and add safety guards

- Fix all 73 SonarQube OPEN issues
- Add nil guards for resourceMonitor, backpressure, metricsCollector
- Implement io.Closer for headerFileReader
- Propagate errors from processing helpers
- Add metrics and templates packages
- Improve error handling across codebase

* test: improve test infrastructure and coverage

- Add benchmarks for cli, fileproc, metrics
- Improve test coverage for cli, fileproc, config
- Refactor tests with helper functions
- Add shared test constants
- Fix test function naming conventions
- Reduce cognitive complexity in benchmark tests

* docs: update documentation and configuration examples

- Update CLAUDE.md with current project state
- Refresh README with new features
- Add usage and configuration examples
- Add SonarQube project configuration
- Consolidate config.example.yaml

* fix: resolve shellcheck warnings in scripts

- Use ./*.go instead of *.go to prevent dash-prefixed filenames
  from being interpreted as options (SC2035)
- Remove unreachable return statement after exit (SC2317)
- Remove obsolete gibidiutils/ directory reference

* chore(deps): upgrade go dependencies

* chore(lint): megalinter fixes

* fix: improve test coverage and fix file descriptor leaks

- Add defer r.Close() to fix pipe file descriptor leaks in benchmark tests
- Refactor TestProcessorConfigureFileTypes with helper functions and assertions
- Refactor TestProcessorLogFinalStats with output capture and keyword verification
- Use shared constants instead of literal strings (TestFilePNG, FormatMarkdown, etc.)
- Reduce cognitive complexity by extracting helper functions

* fix: align test comments with function names

Remove underscores from test comments to match actual function names:
- benchmark/benchmark_test.go (2 fixes)
- fileproc/filetypes_config_test.go (4 fixes)
- fileproc/filetypes_registry_test.go (6 fixes)
- fileproc/processor_test.go (6 fixes)
- fileproc/resource_monitor_types_test.go (4 fixes)
- fileproc/writer_test.go (3 fixes)

* fix: various test improvements and bug fixes

- Remove duplicate maxCacheSize check in filetypes_registry_test.go
- Shorten long comment in processor_test.go to stay under 120 chars
- Remove flaky time.Sleep in collector_test.go, use >= 0 assertion
- Close pipe reader in benchmark_test.go to fix file descriptor leak
- Use ContinueOnError in flags_test.go to match ResetFlags behavior
- Add nil check for p.ui in processor_workers.go before UpdateProgress
- Fix resource_monitor_validation_test.go by setting hardMemoryLimitBytes directly

* chore(yaml): add missing document start markers

Add --- document start to YAML files to satisfy yamllint:
- .github/workflows/codeql.yml
- .github/workflows/build-test-publish.yml
- .github/workflows/security.yml
- .github/actions/setup/action.yml

* fix: guard nil resourceMonitor and fix test deadlock

- Guard resourceMonitor before CreateFileProcessingContext call
- Add ui.UpdateProgress on emergency stop and path error returns
- Fix potential deadlock in TestProcessFile using wg.Go with defer close
2025-12-10 19:07:11 +02:00

2.8 KiB

CLAUDE.md

Go CLI aggregating code files into LLM-optimized output. Supports markdown/JSON/YAML with concurrent processing.

Architecture

Core: main.go, cli/, fileproc/, config/, utils/, testutil/, cmd/

Advanced: metrics/, templates/, benchmark/

Modules: Collection, processing, writers, registry (~63ns cache), resource limits, metrics, templating

Patterns: Producer-consumer, thread-safe registry, streaming, modular (50-200 lines)

Commands

make lint-fix && make lint && make test
./gibidify -source <dir> -format markdown --verbose
./gibidify -source <dir> -format json --log-level debug --verbose

Config

~/.config/gibidify/config.yaml Size limit 5MB, ignore dirs, custom types, 100MB memory limit

Linting Standards (MANDATORY)

Linter: revive (comprehensive rule set migrated from golangci-lint) Command: revive -config revive.toml ./... Complexity: cognitive-complexity ≤15, cyclomatic ≤15, max-control-nesting ≤5 Security: unhandled errors, secure coding patterns, credential detection Performance: optimize-operands-order, string-format, range optimizations Format: line-length ≤120 chars, EditorConfig (LF, tabs), gofmt/goimports Testing: error handling best practices, 0 tolerance policy

CRITICAL: All rules non-negotiable. make lint-fix && make lint must show 0 issues.

Testing

Coverage: 77.9% overall (utils 90.0%, cli 83.8%, config 77.0%, testutil 73.7%, fileproc 74.5%, metrics 96.0%, templates 87.3%) Patterns: Table-driven tests, shared testutil helpers, mock objects, error assertions Race detection, benchmarks, comprehensive integration tests

Development Patterns

Logging: Use utils.Logger() for all logging (replaces logrus). Default WARN level, set via --log-level flag Error Handling: Use utils.WrapError family for structured errors with context Streaming: Use utils.StreamContent/StreamLines for consistent file processing Context: Use utils.CheckContextCancellation for standardized cancellation Testing: Use testutil.* helpers for directory setup, error assertions Validation: Centralized in config/validation.go with structured error collection

Standards

EditorConfig (LF, tabs), semantic commits, testing required, error wrapping

revive.toml Restrictions

AGENTS DO NOT HAVE PERMISSION to modify revive.toml configuration unless user explicitly requests it. The linting configuration is carefully tuned and should not be altered during normal development.

Status

Health: 9/10 - Production-ready with systematic deduplication complete

Done: Deduplication, errors, benchmarks, config, optimization, testing (77.9%), modularization, linting (0 issues), metrics system, templating

Workflow

  1. make lint-fix first
  2. 80% coverage

  3. Follow patterns
  4. Update docs