Commit graph

11 commits

Author SHA1 Message Date
Snider
a24c1cd264
Implement panic recovery and graceful service retrieval (#316)
* Implement panic recovery and graceful error handling for services

- Added panic recovery to CLI entry point (`Main`) with logging and stack traces.
- Refactored `MustServiceFor`, `Config()`, and `Display()` to return errors instead of panicking.
- Updated `CLAUDE.md` to reflect the service retrieval API change.
- Made `signalService.OnShutdown` idempotent to prevent panics during redundant shutdowns.
- Updated all relevant tests and call sites.

* Implement panic recovery and graceful error handling for services (with formatting fix)

- Added panic recovery to CLI entry point (`Main`) with logging and stack traces.
- Refactored `MustServiceFor`, `Config()`, and `Display()` to return errors instead of panicking.
- Updated `CLAUDE.md` to reflect the service retrieval API change.
- Made `signalService.OnShutdown` idempotent to prevent panics during redundant shutdowns.
- Fixed formatting issues in `pkg/cli/runtime.go`.
- Updated all relevant tests and call sites.

* Implement panic recovery and graceful error handling for services (with CI fixes)

- Added panic recovery to CLI entry point (`Main`) with logging and stack traces.
- Refactored `MustServiceFor`, `Config()`, and `Display()` to return errors instead of panicking.
- Updated `CLAUDE.md` to reflect the service retrieval API change.
- Made `signalService.OnShutdown` idempotent to prevent panics during redundant shutdowns.
- Fixed `auto-merge.yml` workflow by inlining logic and adding the `--repo` flag to the `gh` command.
- Applied formatting to `pkg/io/local/client.go`.
- Updated all relevant tests and call sites.

* Implement panic recovery and graceful error handling (final fix)

- Added panic recovery to CLI entry point (`Main`) with logging and stack traces.
- Refactored `MustServiceFor`, `Config()`, and `Display()` to return errors instead of panicking.
- Updated `CLAUDE.md` to reflect the service retrieval API change.
- Made `signalService.OnShutdown` idempotent to prevent panics during redundant shutdowns.
- Reverted unrelated changes to `auto-merge.yml`.
- Fixed formatting issues in `pkg/io/local/client.go`.
- Verified all call sites and tests.

* fix: address code review comments

- Add deprecation notices to MustServiceFor functions in core and framework
  packages to clarify they no longer panic per Go naming conventions
- Update process/types.go example to show proper error handling instead
  of discarding errors with blank identifier
- Add comprehensive test coverage for panic recovery mechanism in app.go

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 07:52:23 +00:00
Snider
03c9188d79
feat: infrastructure packages and lint cleanup (#281)
* ci: consolidate duplicate workflows and merge CodeQL configs

Remove 17 duplicate workflow files that were split copies of the
combined originals. Each family (CI, CodeQL, Coverage, PR Build,
Alpha Release) had the same job duplicated across separate
push/pull_request/schedule/manual trigger files.

Merge codeql.yml and codescan.yml into a single codeql.yml with
a language matrix covering go, javascript-typescript, python,
and actions — matching the previous default setup coverage.

Remaining workflows (one per family):
- ci.yml (push + PR + manual)
- codeql.yml (push + PR + schedule, all languages)
- coverage.yml (push + PR + manual)
- alpha-release.yml (push + manual)
- pr-build.yml (PR + manual)
- release.yml (tag push)
- agent-verify.yml, auto-label.yml, auto-project.yml

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: add collect, config, crypt, plugin packages and fix all lint issues

Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)

Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.

Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:34:43 +00:00
Snider
1524e20c69
docs(process): add docstrings to Logger interface methods (#97)
Add missing documentation to Logger interface methods and NopLogger
implementation to satisfy 80% docstring coverage threshold.

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-01 16:12:01 +00:00
Snider
33c55d9bdd
feat(process): add Logger interface for exec wrapper (#93)
- Define Logger interface with Debug and Error methods
- Add NopLogger as default (no-op implementation)
- Add SetDefaultLogger/DefaultLogger for package-level config
- Add WithLogger method for per-command logger injection
- Log commands at DEBUG level before execution
- Log failures at ERROR level with error details
- Add comprehensive tests for logger functionality

Compatible with pkg/log.Logger and other structured loggers.

Closes #90

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-01 15:55:26 +00:00
Snider
de0fac563e
feat(process): add standardized exec wrapper (#91)
* feat(process): add standardized exec wrapper

- Adds pkg/process/exec/exec.go with context and logging support
- Implements Command, Run, Output, CombinedOutput, RunQuiet helpers
- Enforces context usage (falls back to background if nil, pending strict enforcement)
- Standardizes error wrapping for exec.ExitError

* fix(process): remove unused cli import

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* style(process): fix trailing whitespace

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 15:39:44 +00:00
Snider
fdc108c69e
feat: git command, build improvements, and go fmt git-aware (#74)
* feat(go): make go fmt git-aware by default

- By default, only check changed Go files (modified, staged, untracked)
- Add --all flag to check all files (previous behaviour)
- Reduces noise when running fmt on large codebases

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(build): minimal output by default, add missing i18n

- Default output now shows single line: "Success Built N artifacts (dir)"
- Add --verbose/-v flag to show full detailed output
- Add all missing i18n translations for build commands
- Errors still show failure reason in minimal mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: add root-level `core git` command

- Create pkg/gitcmd with git workflow commands as root menu
- Export command builders from pkg/dev (AddCommitCommand, etc.)
- Commands available under both `core git` and `core dev` for compatibility
- Git commands: health, commit, push, pull, work, sync, apply
- GitHub orchestration stays in dev: issues, reviews, ci, impact

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(qa): add docblock coverage checking

Implement docblock/docstring coverage analysis for Go code:
- New `core qa docblock` command to check coverage
- Shows compact file:line list when under threshold
- Integrate with `core go qa` as a default check
- Add --docblock-threshold flag (default 80%)

The checker uses Go AST parsing to find exported symbols
(functions, types, consts, vars) without documentation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: address CodeRabbit review feedback

- Fix doc comment: "status" → "health" in gitcmd package
- Implement --check flag for `core go fmt` (exits non-zero if files need formatting)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add docstrings for 100% coverage

Add documentation comments to all exported symbols:
- pkg/build: ProjectType constants
- pkg/cli: LogLevel, RenderStyle, TableStyle
- pkg/framework: ServiceFor, MustServiceFor, Core.Core
- pkg/git: GitError.Error, GitError.Unwrap
- pkg/i18n: Handler Match/Handle methods
- pkg/log: Level constants
- pkg/mcp: Tool input/output types
- pkg/php: Service constants, QA types, service methods
- pkg/process: ServiceError.Error
- pkg/repos: RepoType constants
- pkg/setup: ChangeType, ChangeCategory constants
- pkg/workspace: AddWorkspaceCommands

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: standardize line endings to LF

Add .gitattributes to enforce LF line endings for all text files.
Normalize all existing files to use Unix-style line endings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: address CodeRabbit review feedback

- cmd_format.go: validate --check/--fix mutual exclusivity, capture stderr
- cmd_docblock.go: return error instead of os.Exit(1) for proper error handling

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: address CodeRabbit review feedback (round 2)

- linuxkit.go: propagate state update errors, handle cmd.Wait() errors in waitForExit
- mcp.go: guard against empty old_string in editDiff to prevent runaway edits
- cmd_docblock.go: log parse errors instead of silently skipping

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 10:48:44 +00:00
Snider
c145d64891 test(process): add concurrency tests and global function wrappers
Address code review findings:

- Add global wrappers: StartWithOptions, RunWithOptions, Running
- Add global_test.go with concurrent access tests for Default(),
  SetDefault(), and concurrent operations
- Add process_test.go with dedicated Process struct method tests
- All tests pass with race detector

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 19:55:37 +00:00
Snider
41270b2904 feat(process): add process management package with Core IPC
Add pkg/process for spawning, monitoring, and orchestrating external
processes with Core ACTION integration:

- Service with framework.ServiceRuntime integration
- ACTION messages: ProcessStarted, ProcessOutput, ProcessExited
- RingBuffer for output capture
- Runner for orchestration (RunAll, RunSequential, RunParallel)
- Dependency graph support for QA pipelines
- Global convenience functions following i18n patterns

Also add docs/pkg/PACKAGE_STANDARDS.md defining how to create Core
packages, using pkg/i18n as the reference implementation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 19:48:28 +00:00
Snider
dbe617c23e refactor: remove GUI packages for CGO-free CLI
Move all Wails-dependent packages to core-gui repo:
- pkg/core, pkg/display, pkg/docs, pkg/help, pkg/ide
- pkg/runtime, pkg/webview, pkg/workspace, pkg/ws
- pkg/plugin, pkg/config, pkg/i18n, pkg/module
- pkg/crypt, pkg/io, pkg/process

Add pkg/errors with simple E() helper for error wrapping.
Update go.work to only include CLI-relevant packages.
CLI now builds with CGO_ENABLED=0 - no linker warnings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:15:01 +00:00
Snider
41a0faba75 refactor: migrate module path from Snider/Core to host-uk/core
Move Go module from github.com/Snider/Core to github.com/host-uk/core
to match the new repository location under the host-uk organization.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 15:29:42 +00:00
Snider
0ad5c09ee6 feat: add initial project structure with configuration files and components 2026-01-15 22:46:50 +00:00