diff --git a/internal/recipe/runner.go b/internal/recipe/runner.go index d5aa117..eea56d4 100644 --- a/internal/recipe/runner.go +++ b/internal/recipe/runner.go @@ -24,6 +24,7 @@ func (r *Runner) Run() error { fmt.Printf("🍳 Starting recipe: %s v%s\n\n", r.Recipe.Name, r.Recipe.Version) var previousResults []string + var refactorJSONs []string // collect only JSON from refactor steps for _, step := range r.Recipe.Steps { fmt.Printf("Step %d/%d: %s\n", step.Number, len(r.Recipe.Steps), step.Title) @@ -38,15 +39,15 @@ func (r *Runner) Run() error { fmt.Println(result) case strings.Contains(titleLower, "refactor"): - r.refactorFiles(previousResults) // <-- new one-file-at-a-time handler + r.refactorFiles(previousResults, &refactorJSONs) continue case strings.Contains(titleLower, "apply") || strings.Contains(titleLower, "patch"): - r.handleApplyStep(previousResults) + r.handleApplyStep(refactorJSONs) continue default: - // fallback for any other step + // fallback prompt := fmt.Sprintf(`Recipe Overview: %s @@ -81,10 +82,17 @@ Execute this step now. Respond ONLY with the expected output format — no expla return nil } -// discoverFiles — real filesystem scan (we'll generalize with extensions next) +// discoverFiles now respects the package_path parameter from the recipe func (r *Runner) discoverFiles() []string { var files []string + + // Use parameter if present, otherwise fall back to internal root := "internal" + if p, ok := r.Recipe.Parameters["package_path"]; ok { + if def, ok := p.Default.(string); ok && def != "" { + root = def + } + } _ = filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { if err != nil || d.IsDir() || !strings.HasSuffix(path, ".go") { @@ -103,8 +111,8 @@ func (r *Runner) discoverFiles() []string { return files } -// refactorFiles — one file at a time (small JSON, no truncation) -func (r *Runner) refactorFiles(previousResults []string) { +// refactorFiles — one file at a time, stores pure JSON for apply step +func (r *Runner) refactorFiles(previousResults []string, refactorJSONs *[]string) { discoveredLine := previousResults[len(previousResults)-1] lines := strings.Split(discoveredLine, "\n") @@ -142,8 +150,7 @@ Original file: response := r.Client.Stream(messages, r.Model) fmt.Println() - // store the JSON response for the apply step - previousResults = append(previousResults, response) + *refactorJSONs = append(*refactorJSONs, response) } } @@ -152,24 +159,23 @@ type FileChange struct { Content string `json:"content"` } -func (r *Runner) handleApplyStep(previousResults []string) { - if len(previousResults) == 0 { - fmt.Println(" ⚠️ No previous results to apply — skipping.") +func (r *Runner) handleApplyStep(refactorJSONs []string) { + if len(refactorJSONs) == 0 { + fmt.Println(" ⚠️ No refactored files to apply — skipping.") return } - // collect all JSON objects from the refactor step(s) var allChanges []FileChange - for _, res := range previousResults { - start := strings.Index(res, "{") - end := strings.LastIndex(res, "}") + 1 + for _, jsonStr := range refactorJSONs { + // Find the JSON object in the response + start := strings.Index(jsonStr, "{") + end := strings.LastIndex(jsonStr, "}") + 1 if start == -1 { continue } - jsonStr := res[start:end] var ch FileChange - if err := json.Unmarshal([]byte(jsonStr), &ch); err == nil { + if err := json.Unmarshal([]byte(jsonStr[start:end]), &ch); err == nil && ch.File != "" { allChanges = append(allChanges, ch) } } diff --git a/test_output.txt b/test_output.txt deleted file mode 100644 index 20a7be6..0000000 --- a/test_output.txt +++ /dev/null @@ -1,644 +0,0 @@ -? gmgauthier.com/grokkit [no test files] -=== RUN TestAgentCommand_PlanGeneration - agent_test.go:8: Agent plan generation test placeholder — ready for expansion ---- PASS: TestAgentCommand_PlanGeneration (0.00s) -=== RUN TestAgentCommand_CleanCodeResponseIntegration ---- PASS: TestAgentCommand_CleanCodeResponseIntegration (0.00s) -=== RUN TestBuildChangelogMessages -=== PAUSE TestBuildChangelogMessages -=== RUN TestBuildFullChangelog -=== PAUSE TestBuildFullChangelog -=== RUN TestChangelogCmd_Flags -=== PAUSE TestChangelogCmd_Flags -=== RUN TestGetChatHistoryFile ---- PASS: TestGetChatHistoryFile (0.00s) -=== RUN TestLoadChatHistory_NoFile ---- PASS: TestLoadChatHistory_NoFile (0.00s) -=== RUN TestSaveAndLoadChatHistory ---- PASS: TestSaveAndLoadChatHistory (0.00s) -=== RUN TestLoadChatHistory_InvalidJSON ---- PASS: TestLoadChatHistory_InvalidJSON (0.00s) -=== RUN TestBuildCommitMessages -=== RUN TestBuildCommitMessages/normal_diff -=== RUN TestBuildCommitMessages/empty_diff ---- PASS: TestBuildCommitMessages (0.00s) - --- PASS: TestBuildCommitMessages/normal_diff (0.00s) - --- PASS: TestBuildCommitMessages/empty_diff (0.00s) -=== RUN TestCompletionCmd -=== RUN TestCompletionCmd/bash -=== RUN TestCompletionCmd/zsh -=== RUN TestCompletionCmd/fish -=== RUN TestCompletionCmd/powershell ---- PASS: TestCompletionCmd (0.00s) - --- PASS: TestCompletionCmd/bash (0.00s) - --- PASS: TestCompletionCmd/zsh (0.00s) - --- PASS: TestCompletionCmd/fish (0.00s) - --- PASS: TestCompletionCmd/powershell (0.00s) -=== RUN TestBuildDocsMessages -=== RUN TestBuildDocsMessages/Go -=== RUN TestBuildDocsMessages/Python -=== RUN TestBuildDocsMessages/C -=== RUN TestBuildDocsMessages/C++ -=== RUN TestBuildDocsMessages/JavaScript -=== RUN TestBuildDocsMessages/TypeScript -=== RUN TestBuildDocsMessages/Rust -=== RUN TestBuildDocsMessages/Ruby -=== RUN TestBuildDocsMessages/Java -=== RUN TestBuildDocsMessages/Shell ---- PASS: TestBuildDocsMessages (0.00s) - --- PASS: TestBuildDocsMessages/Go (0.00s) - --- PASS: TestBuildDocsMessages/Python (0.00s) - --- PASS: TestBuildDocsMessages/C (0.00s) - --- PASS: TestBuildDocsMessages/C++ (0.00s) - --- PASS: TestBuildDocsMessages/JavaScript (0.00s) - --- PASS: TestBuildDocsMessages/TypeScript (0.00s) - --- PASS: TestBuildDocsMessages/Rust (0.00s) - --- PASS: TestBuildDocsMessages/Ruby (0.00s) - --- PASS: TestBuildDocsMessages/Java (0.00s) - --- PASS: TestBuildDocsMessages/Shell (0.00s) -=== RUN TestDocStyle -=== RUN TestDocStyle/go -=== RUN TestDocStyle/Go -=== RUN TestDocStyle/python -=== RUN TestDocStyle/c -=== RUN TestDocStyle/c++ -=== RUN TestDocStyle/javascript -=== RUN TestDocStyle/typescript -=== RUN TestDocStyle/rust -=== RUN TestDocStyle/ruby -=== RUN TestDocStyle/java -=== RUN TestDocStyle/shell -=== RUN TestDocStyle/bash -=== RUN TestDocStyle/unknown ---- PASS: TestDocStyle (0.00s) - --- PASS: TestDocStyle/go (0.00s) - --- PASS: TestDocStyle/Go (0.00s) - --- PASS: TestDocStyle/python (0.00s) - --- PASS: TestDocStyle/c (0.00s) - --- PASS: TestDocStyle/c++ (0.00s) - --- PASS: TestDocStyle/javascript (0.00s) - --- PASS: TestDocStyle/typescript (0.00s) - --- PASS: TestDocStyle/rust (0.00s) - --- PASS: TestDocStyle/ruby (0.00s) - --- PASS: TestDocStyle/java (0.00s) - --- PASS: TestDocStyle/shell (0.00s) - --- PASS: TestDocStyle/bash (0.00s) - --- PASS: TestDocStyle/unknown (0.00s) -=== RUN TestRemoveLastModifiedComments -=== RUN TestRemoveLastModifiedComments/removes_last_modified_comment -=== RUN TestRemoveLastModifiedComments/removes_multiple_last_modified_comments -=== RUN TestRemoveLastModifiedComments/preserves_code_without_last_modified -=== RUN TestRemoveLastModifiedComments/handles_empty_string -=== RUN TestRemoveLastModifiedComments/preserves_other_comments -=== RUN TestRemoveLastModifiedComments/handles_line_with_only_last_modified ---- PASS: TestRemoveLastModifiedComments (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_last_modified_comment (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_multiple_last_modified_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_code_without_last_modified (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_empty_string (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_other_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_line_with_only_last_modified (0.00s) -=== RUN TestEditCommand ---- PASS: TestEditCommand (0.68s) -=== RUN TestBuildHistoryMessages -=== RUN TestBuildHistoryMessages/with_recent_commits -=== RUN TestBuildHistoryMessages/empty_log ---- PASS: TestBuildHistoryMessages (0.00s) - --- PASS: TestBuildHistoryMessages/with_recent_commits (0.00s) - --- PASS: TestBuildHistoryMessages/empty_log (0.00s) -=== RUN TestBuildLintFixMessages -=== RUN TestBuildLintFixMessages/go_file_with_issues -=== RUN TestBuildLintFixMessages/python_file_with_issues ---- PASS: TestBuildLintFixMessages (0.00s) - --- PASS: TestBuildLintFixMessages/go_file_with_issues (0.00s) - --- PASS: TestBuildLintFixMessages/python_file_with_issues (0.00s) -=== RUN TestBuildPRDescribeMessages -=== RUN TestBuildPRDescribeMessages/branch_with_changes -=== RUN TestBuildPRDescribeMessages/empty_diff ---- PASS: TestBuildPRDescribeMessages (0.00s) - --- PASS: TestBuildPRDescribeMessages/branch_with_changes (0.00s) - --- PASS: TestBuildPRDescribeMessages/empty_diff (0.00s) -=== RUN TestBuildReviewMessages -=== RUN TestBuildReviewMessages/with_status_and_diff -=== RUN TestBuildReviewMessages/empty_diff ---- PASS: TestBuildReviewMessages (0.00s) - --- PASS: TestBuildReviewMessages/with_status_and_diff (0.00s) - --- PASS: TestBuildReviewMessages/empty_diff (0.00s) -=== RUN TestExecute -=== RUN TestExecute/version -grokkit version dev (commit )\n=== RUN TestExecute/help -A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow. - -Usage: - grokkit [command] - -Available Commands: - agent Multi-file agent — Grok intelligently edits multiple files with preview - changelog Generate CHANGELOG.md section from git history for Gitea releases - chat Simple interactive CLI chat with Grok (full history + streaming) - commit Generate message and commit staged changes - commit-msg Generate conventional commit message from staged changes - completion Generate shell completion script - docs Generate documentation comments for source files - edit Edit a file in-place with Grok (safe preview) - help Help about any command - history Summarize recent git history - lint Lint a file and optionally apply AI-suggested fixes - pr-describe Generate full PR description from current branch - query One-shot non-interactive query to Grok (programming focused) - query One-shot non-interactive query to Grok (programming focused) - recipe Run a recipe (transactional sous-chef mode) - review Review the current repository or directory - scaffold Scaffold a new file with Grok (safe preview + confirmation) - testgen Generate AI unit tests for files (Go/Python/C/C++, preview/apply) - version Print the version information - -Flags: - --debug Enable debug logging (logs to stderr and file) - -h, --help help for grokkit - -m, --model string Grok model to use (overrides config) - -v, --verbose Enable verbose logging - -Use "grokkit [command] --help" for more information about a command. -=== RUN TestExecute/debug_flag -{"time":"2026-03-06T21:37:40.647542566Z","level":"INFO","msg":"grokkit starting","command":"version","log_level":"debug"} -grokkit version dev (commit )\n=== RUN TestExecute/verbose_flag -grokkit version dev (commit )\n--- PASS: TestExecute (0.00s) - --- PASS: TestExecute/version (0.00s) - --- PASS: TestExecute/help (0.00s) - --- PASS: TestExecute/debug_flag (0.00s) - --- PASS: TestExecute/verbose_flag (0.00s) -=== RUN TestRunHistory -=== RUN TestRunHistory/calls_AI_with_log_output -Summarizing recent commits... -=== RUN TestRunHistory/no_commits_—_skips_AI -No commits found. -=== RUN TestRunHistory/git_error_—_skips_AI -Failed to get git log: not a git repo ---- PASS: TestRunHistory (0.00s) - --- PASS: TestRunHistory/calls_AI_with_log_output (0.00s) - --- PASS: TestRunHistory/no_commits_—_skips_AI (0.00s) - --- PASS: TestRunHistory/git_error_—_skips_AI (0.00s) -=== RUN TestRunReview -=== RUN TestRunReview/reviews_with_diff_and_status -Grok is reviewing the repo... -=== RUN TestRunReview/git_diff_error_—_skips_AI -Failed to get git diff: git error -=== RUN TestRunReview/git_status_error_—_skips_AI -Failed to get git status: git error ---- PASS: TestRunReview (0.00s) - --- PASS: TestRunReview/reviews_with_diff_and_status (0.00s) - --- PASS: TestRunReview/git_diff_error_—_skips_AI (0.00s) - --- PASS: TestRunReview/git_status_error_—_skips_AI (0.00s) -=== RUN TestRunCommit -=== RUN TestRunCommit/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommit/git_error_—_skips_AI -Failed to get staged changes: not a git repo -=== RUN TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin -Generating commit message... - -Proposed commit message: -feat(cmd): add thing -Commit with this message? (y/n): -Aborted. ---- PASS: TestRunCommit (0.00s) - --- PASS: TestRunCommit/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommit/git_error_—_skips_AI (0.00s) - --- PASS: TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin (0.00s) -=== RUN TestRunCommitMsg -=== RUN TestRunCommitMsg/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message -Generating commit message... ---- PASS: TestRunCommitMsg (0.00s) - --- PASS: TestRunCommitMsg/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message (0.00s) -=== RUN TestRunPRDescribe -=== RUN TestRunPRDescribe/no_changes_on_branch_—_skips_AI -No changes on this branch compared to master/origin/master. -=== RUN TestRunPRDescribe/first_diff_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/uses_custom_base_branch -Writing PR description... -=== RUN TestRunPRDescribe/defaults_to_master -Writing PR description... ---- PASS: TestRunPRDescribe (0.00s) - --- PASS: TestRunPRDescribe/no_changes_on_branch_—_skips_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/uses_custom_base_branch (0.00s) - --- PASS: TestRunPRDescribe/defaults_to_master (0.00s) -=== RUN TestRunLintFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestRunLintFileNotFound (0.00s) -=== RUN TestProcessDocsFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestProcessDocsFileNotFound (0.00s) -=== RUN TestProcessDocsFileUnsupportedLanguage -⚠️ Skipping /tmp/test2101107302.xyz: unsupported file type: .xyz ---- PASS: TestProcessDocsFileUnsupportedLanguage (0.00s) -=== RUN TestProcessDocsFilePreviewAndCancel -📝 Generating Go docs for: /tmp/test533748323.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Foo does nothing. -func Foo() {} --------------------------------------------------------------------------------- - -Apply documentation to /tmp/test533748323.go? (y/N): -❌ Cancelled. No changes made to: /tmp/test533748323.go ---- PASS: TestProcessDocsFilePreviewAndCancel (0.00s) -=== RUN TestProcessDocsFileAutoApply -📝 Generating Go docs for: /tmp/test2461183796.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Bar does nothing. -func Bar() {} --------------------------------------------------------------------------------- - -✅ Documentation applied: /tmp/test2461183796.go ---- PASS: TestProcessDocsFileAutoApply (0.00s) -=== RUN TestRunDocs -❌ File not found: /nonexistent/file.go ---- PASS: TestRunDocs (0.00s) -=== RUN TestScaffoldCmd - scaffold_test.go:15: ✓ Fast scaffold unit test (no Grok API call) ---- PASS: TestScaffoldCmd (0.00s) -=== RUN TestScaffoldCmd_Live - scaffold_test.go:22: skipping live Grok integration test. Run with: - go test ./cmd -run TestScaffoldCmd_Live -short -v ---- SKIP: TestScaffoldCmd_Live (0.00s) -=== RUN TestTestgenCmd -=== PAUSE TestTestgenCmd -=== RUN TestTestgenCmd_Live - testgen_test.go:17: skipping live Grok integration test. Run with: - go test ./cmd -run TestTestgenCmd_Live -short -v ---- SKIP: TestTestgenCmd_Live (0.00s) -=== RUN TestRemoveSourceComments -=== PAUSE TestRemoveSourceComments -=== RUN TestGetTestPrompt -=== PAUSE TestGetTestPrompt -=== RUN TestGetTestFilePath -=== PAUSE TestGetTestFilePath -=== RUN TestGetCodeLang -=== PAUSE TestGetCodeLang -=== CONT TestBuildChangelogMessages -=== CONT TestRemoveSourceComments ---- PASS: TestBuildChangelogMessages (0.00s) -=== CONT TestGetCodeLang -=== RUN TestRemoveSourceComments/no_comments -=== RUN TestGetCodeLang/Go -=== PAUSE TestRemoveSourceComments/no_comments -=== CONT TestChangelogCmd_Flags -=== RUN TestRemoveSourceComments/last_modified -=== CONT TestGetTestFilePath -=== PAUSE TestRemoveSourceComments/last_modified -=== RUN TestGetTestFilePath/foo.go_Go -=== RUN TestRemoveSourceComments/generated_by -=== PAUSE TestRemoveSourceComments/generated_by -=== CONT TestTestgenCmd -=== RUN TestRemoveSourceComments/multiple_removable_lines -=== PAUSE TestGetTestFilePath/foo.go_Go -=== PAUSE TestRemoveSourceComments/multiple_removable_lines -=== RUN TestGetTestFilePath/dir/foo.py_Python ---- PASS: TestChangelogCmd_Flags (0.00s) -=== RUN TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetTestFilePath/dir/foo.py_Python -=== PAUSE TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetTestFilePath/bar.c_C -=== RUN TestRemoveSourceComments/python_testgen -=== CONT TestGetTestPrompt -=== PAUSE TestRemoveSourceComments/python_testgen -=== PAUSE TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/Go -=== RUN TestGetTestFilePath/baz.cpp_C++ -=== RUN TestRemoveSourceComments/c_testgen -=== PAUSE TestGetTestFilePath/baz.cpp_C++ -=== PAUSE TestGetTestPrompt/Go -=== CONT TestGetTestFilePath/dir/foo.py_Python -=== RUN TestGetTestPrompt/Python -=== PAUSE TestGetTestPrompt/Python -=== RUN TestGetTestPrompt/C -=== CONT TestGetTestFilePath/foo.go_Go -=== PAUSE TestGetTestPrompt/C -=== NAME TestTestgenCmd - testgen_test.go:12: ✓ Fast testgen unit test (no Grok API call) -=== RUN TestGetTestPrompt/C++ ---- PASS: TestTestgenCmd (0.00s) -=== PAUSE TestGetTestPrompt/C++ -=== CONT TestBuildFullChangelog -=== RUN TestGetTestPrompt/Invalid -=== PAUSE TestGetTestPrompt/Invalid -=== CONT TestGetTestFilePath/baz.cpp_C++ -=== CONT TestGetTestPrompt/Invalid -=== RUN TestBuildFullChangelog/creates_new_file_with_header -=== CONT TestGetTestPrompt/C++ -=== CONT TestGetTestPrompt/Python -=== PAUSE TestBuildFullChangelog/creates_new_file_with_header -=== PAUSE TestGetCodeLang/Go -=== RUN TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetCodeLang/Python -=== PAUSE TestBuildFullChangelog/prepends_to_existing_file -=== PAUSE TestGetCodeLang/Python -=== CONT TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetCodeLang/C -=== PAUSE TestGetCodeLang/C -=== RUN TestGetCodeLang/C++ -=== PAUSE TestGetCodeLang/C++ -=== CONT TestGetCodeLang/Go -=== CONT TestGetCodeLang/C++ -=== CONT TestGetTestFilePath/bar.c_C -=== CONT TestGetCodeLang/C -=== CONT TestGetCodeLang/Python -=== PAUSE TestRemoveSourceComments/c_testgen ---- PASS: TestGetTestFilePath (0.00s) - --- PASS: TestGetTestFilePath/dir/foo.py_Python (0.00s) - --- PASS: TestGetTestFilePath/foo.go_Go (0.00s) - --- PASS: TestGetTestFilePath/baz.cpp_C++ (0.00s) - --- PASS: TestGetTestFilePath/bar.c_C (0.00s) -=== CONT TestGetTestPrompt/Go -=== CONT TestRemoveSourceComments/partial_match_no_remove ---- PASS: TestGetCodeLang (0.00s) - --- PASS: TestGetCodeLang/Go (0.00s) - --- PASS: TestGetCodeLang/C++ (0.00s) - --- PASS: TestGetCodeLang/C (0.00s) - --- PASS: TestGetCodeLang/Python (0.00s) -=== CONT TestRemoveSourceComments/last_modified -=== CONT TestRemoveSourceComments/c_testgen -=== CONT TestGetTestPrompt/C -=== CONT TestRemoveSourceComments/python_testgen -=== CONT TestBuildFullChangelog/creates_new_file_with_header ---- PASS: TestGetTestPrompt (0.00s) - --- PASS: TestGetTestPrompt/Invalid (0.00s) - --- PASS: TestGetTestPrompt/C++ (0.00s) - --- PASS: TestGetTestPrompt/Python (0.00s) - --- PASS: TestGetTestPrompt/Go (0.00s) - --- PASS: TestGetTestPrompt/C (0.00s) -=== CONT TestRemoveSourceComments/no_comments -=== CONT TestRemoveSourceComments/multiple_removable_lines -=== CONT TestRemoveSourceComments/generated_by ---- PASS: TestRemoveSourceComments (0.00s) - --- PASS: TestRemoveSourceComments/partial_match_no_remove (0.00s) - --- PASS: TestRemoveSourceComments/last_modified (0.00s) - --- PASS: TestRemoveSourceComments/python_testgen (0.00s) - --- PASS: TestRemoveSourceComments/c_testgen (0.00s) - --- PASS: TestRemoveSourceComments/no_comments (0.00s) - --- PASS: TestRemoveSourceComments/multiple_removable_lines (0.00s) - --- PASS: TestRemoveSourceComments/generated_by (0.00s) ---- PASS: TestBuildFullChangelog (0.00s) - --- PASS: TestBuildFullChangelog/prepends_to_existing_file (0.00s) - --- PASS: TestBuildFullChangelog/creates_new_file_with_header (0.00s) -PASS -ok gmgauthier.com/grokkit/cmd 0.692s -=== RUN TestGetModel -=== RUN TestGetModel/returns_flag_model_when_provided -=== RUN TestGetModel/returns_default_when_flag_empty ---- PASS: TestGetModel (0.00s) - --- PASS: TestGetModel/returns_flag_model_when_provided (0.00s) - --- PASS: TestGetModel/returns_default_when_flag_empty (0.00s) -=== RUN TestGetModelWithAlias ---- PASS: TestGetModelWithAlias (0.00s) -=== RUN TestGetCommandModel -=== RUN TestGetCommandModel/lint_ -=== RUN TestGetCommandModel/lint_override -=== RUN TestGetCommandModel/other_ -=== RUN TestGetCommandModel/unknown_ ---- PASS: TestGetCommandModel (0.00s) - --- PASS: TestGetCommandModel/lint_ (0.00s) - --- PASS: TestGetCommandModel/lint_override (0.00s) - --- PASS: TestGetCommandModel/other_ (0.00s) - --- PASS: TestGetCommandModel/unknown_ (0.00s) -=== RUN TestLoad ---- PASS: TestLoad (0.00s) -=== RUN TestGetTemperature ---- PASS: TestGetTemperature (0.00s) -=== RUN TestGetTimeout ---- PASS: TestGetTimeout (0.00s) -=== RUN TestGetLogLevel ---- PASS: TestGetLogLevel (0.00s) -PASS -ok gmgauthier.com/grokkit/config (cached) -=== RUN TestGitError ---- PASS: TestGitError (0.00s) -=== RUN TestAPIError -=== RUN TestAPIError/with_status_code -=== RUN TestAPIError/without_status_code ---- PASS: TestAPIError (0.00s) - --- PASS: TestAPIError/with_status_code (0.00s) - --- PASS: TestAPIError/without_status_code (0.00s) -=== RUN TestFileError ---- PASS: TestFileError (0.00s) -=== RUN TestAPIErrorUnwrap ---- PASS: TestAPIErrorUnwrap (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/errors (cached) -=== RUN TestIsRepo ---- PASS: TestIsRepo (0.00s) -=== RUN TestRun -=== RUN TestRun/version_command_succeeds -=== RUN TestRun/invalid_command_fails ---- PASS: TestRun (0.01s) - --- PASS: TestRun/version_command_succeeds (0.00s) - --- PASS: TestRun/invalid_command_fails (0.01s) -=== RUN TestGitRunner ---- PASS: TestGitRunner (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/git (cached) -=== RUN TestCleanCodeResponse_Comprehensive -=== RUN TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/handles_no_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse_Comprehensive/trims_leading_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/handles_multiple_languages -=== RUN TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces -=== RUN TestCleanCodeResponse_Comprehensive/removes_only_fence_lines -=== RUN TestCleanCodeResponse_Comprehensive/handles_empty_input -=== RUN TestCleanCodeResponse_Comprehensive/handles_only_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_code_indentation ---- PASS: TestCleanCodeResponse_Comprehensive (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_leading_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_multiple_languages (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_only_fence_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_empty_input (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_only_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_code_indentation (0.00s) -=== RUN TestCleanCodeResponse -=== RUN TestCleanCodeResponse/removes_markdown_fences -=== RUN TestCleanCodeResponse/removes_language_tag -=== RUN TestCleanCodeResponse/handles_no_fences -=== RUN TestCleanCodeResponse/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse/trims_whitespace ---- PASS: TestCleanCodeResponse (0.00s) - --- PASS: TestCleanCodeResponse/removes_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse/removes_language_tag (0.00s) - --- PASS: TestCleanCodeResponse/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse/trims_whitespace (0.00s) -=== RUN TestStreamSilent ---- PASS: TestStreamSilent (0.00s) -=== RUN TestStream -foobar ---- PASS: TestStream (0.00s) -=== RUN TestStreamWithTemp -response ---- PASS: TestStreamWithTemp (0.00s) -=== RUN TestStreamDoneSignal ---- PASS: TestStreamDoneSignal (0.00s) -=== RUN TestStreamEmptyResponse ---- PASS: TestStreamEmptyResponse (0.00s) -=== RUN TestNewClient ---- PASS: TestNewClient (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/grok (cached) -=== RUN TestDetectLanguage -=== RUN TestDetectLanguage/Go_file -=== RUN TestDetectLanguage/Python_file -=== RUN TestDetectLanguage/JavaScript_file -=== RUN TestDetectLanguage/JSX_file -=== RUN TestDetectLanguage/TypeScript_file -=== RUN TestDetectLanguage/TSX_file -=== RUN TestDetectLanguage/Rust_file -=== RUN TestDetectLanguage/Ruby_file -=== RUN TestDetectLanguage/Java_file -=== RUN TestDetectLanguage/C_file -=== RUN TestDetectLanguage/C++_file -=== RUN TestDetectLanguage/Header_file -=== RUN TestDetectLanguage/Shell_script -=== RUN TestDetectLanguage/Bash_script -=== RUN TestDetectLanguage/Unsupported_file -=== RUN TestDetectLanguage/No_extension -=== RUN TestDetectLanguage/Case_insensitive ---- PASS: TestDetectLanguage (0.00s) - --- PASS: TestDetectLanguage/Go_file (0.00s) - --- PASS: TestDetectLanguage/Python_file (0.00s) - --- PASS: TestDetectLanguage/JavaScript_file (0.00s) - --- PASS: TestDetectLanguage/JSX_file (0.00s) - --- PASS: TestDetectLanguage/TypeScript_file (0.00s) - --- PASS: TestDetectLanguage/TSX_file (0.00s) - --- PASS: TestDetectLanguage/Rust_file (0.00s) - --- PASS: TestDetectLanguage/Ruby_file (0.00s) - --- PASS: TestDetectLanguage/Java_file (0.00s) - --- PASS: TestDetectLanguage/C_file (0.00s) - --- PASS: TestDetectLanguage/C++_file (0.00s) - --- PASS: TestDetectLanguage/Header_file (0.00s) - --- PASS: TestDetectLanguage/Shell_script (0.00s) - --- PASS: TestDetectLanguage/Bash_script (0.00s) - --- PASS: TestDetectLanguage/Unsupported_file (0.00s) - --- PASS: TestDetectLanguage/No_extension (0.00s) - --- PASS: TestDetectLanguage/Case_insensitive (0.00s) -=== RUN TestCheckLinterAvailable -=== RUN TestCheckLinterAvailable/go_command_should_be_available - linter_test.go:84: go should be available on system with Go installed: available=true -=== RUN TestCheckLinterAvailable/nonexistent_command - linter_test.go:84: nonexistent command should not be available: available=false ---- PASS: TestCheckLinterAvailable (0.00s) - --- PASS: TestCheckLinterAvailable/go_command_should_be_available (0.00s) - --- PASS: TestCheckLinterAvailable/nonexistent_command (0.00s) -=== RUN TestFindAvailableLinter -=== RUN TestFindAvailableLinter/Go_language_should_find_a_linter -=== RUN TestFindAvailableLinter/Language_with_no_available_linters ---- PASS: TestFindAvailableLinter (0.00s) - --- PASS: TestFindAvailableLinter/Go_language_should_find_a_linter (0.00s) - --- PASS: TestFindAvailableLinter/Language_with_no_available_linters (0.00s) -=== RUN TestRunLinter -=== RUN TestRunLinter/Run_go_vet_on_valid_file - linter_test.go:179: go vet result: ExitCode=0, HasIssues=false, Output="" -=== RUN TestRunLinter/Run_nonexistent_linter ---- PASS: TestRunLinter (0.09s) - --- PASS: TestRunLinter/Run_go_vet_on_valid_file (0.09s) - --- PASS: TestRunLinter/Run_nonexistent_linter (0.00s) -=== RUN TestLintFile -=== RUN TestLintFile/Lint_valid_Go_file -=== RUN TestLintFile/Lint_nonexistent_file -=== RUN TestLintFile/Lint_unsupported_file_type ---- PASS: TestLintFile (0.23s) - --- PASS: TestLintFile/Lint_valid_Go_file (0.23s) - --- PASS: TestLintFile/Lint_nonexistent_file (0.00s) - --- PASS: TestLintFile/Lint_unsupported_file_type (0.00s) -=== RUN TestGetSupportedLanguages ---- PASS: TestGetSupportedLanguages (0.00s) -=== RUN TestLanguageStructure ---- PASS: TestLanguageStructure (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/linter (cached) -=== RUN TestInit -=== RUN TestInit/default_level -=== RUN TestInit/debug_level -=== RUN TestInit/warn_level -=== RUN TestInit/error_level -=== RUN TestInit/invalid_level_defaults_to_info ---- PASS: TestInit (0.00s) - --- PASS: TestInit/default_level (0.00s) - --- PASS: TestInit/debug_level (0.00s) - --- PASS: TestInit/warn_level (0.00s) - --- PASS: TestInit/error_level (0.00s) - --- PASS: TestInit/invalid_level_defaults_to_info (0.00s) -=== RUN TestLogging -{"time":"2026-03-06T21:37:18.86971947Z","level":"DEBUG","msg":"test debug message","key":"value"} -{"time":"2026-03-06T21:37:18.869798249Z","level":"INFO","msg":"test info message","count":42} -{"time":"2026-03-06T21:37:18.869804305Z","level":"WARN","msg":"test warn message","enabled":true} -{"time":"2026-03-06T21:37:18.869808331Z","level":"ERROR","msg":"test error message","error":"something went wrong"} ---- PASS: TestLogging (0.00s) -=== RUN TestSetLevel ---- PASS: TestSetLevel (0.00s) -=== RUN TestWith ---- PASS: TestWith (0.00s) -=== RUN TestWithContext -=== RUN TestWithContext/without_init -=== RUN TestWithContext/with_init ---- PASS: TestWithContext (0.00s) - --- PASS: TestWithContext/without_init (0.00s) - --- PASS: TestWithContext/with_init (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/logger (cached) -=== RUN TestExtractCodeBlocks -=== PAUSE TestExtractCodeBlocks -=== CONT TestExtractCodeBlocks -=== RUN TestExtractCodeBlocks/Single_block -=== RUN TestExtractCodeBlocks/Multiple_blocks -=== RUN TestExtractCodeBlocks/No_blocks -=== RUN TestExtractCodeBlocks/Incomplete_block ---- PASS: TestExtractCodeBlocks (0.00s) - --- PASS: TestExtractCodeBlocks/Single_block (0.00s) - --- PASS: TestExtractCodeBlocks/Multiple_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/No_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/Incomplete_block (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/recipe (cached) -=== RUN TestVersionInfo -=== PAUSE TestVersionInfo -=== CONT TestVersionInfo -=== RUN TestVersionInfo/Version -=== PAUSE TestVersionInfo/Version -=== RUN TestVersionInfo/Commit -=== PAUSE TestVersionInfo/Commit -=== RUN TestVersionInfo/BuildDate -=== PAUSE TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Version -=== CONT TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Commit ---- PASS: TestVersionInfo (0.00s) - --- PASS: TestVersionInfo/Version (0.00s) - --- PASS: TestVersionInfo/BuildDate (0.00s) - --- PASS: TestVersionInfo/Commit (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/version (cached) diff --git a/test_output_all.txt b/test_output_all.txt deleted file mode 100644 index 4d45152..0000000 --- a/test_output_all.txt +++ /dev/null @@ -1,644 +0,0 @@ -? gmgauthier.com/grokkit [no test files] -=== RUN TestAgentCommand_PlanGeneration - agent_test.go:8: Agent plan generation test placeholder — ready for expansion ---- PASS: TestAgentCommand_PlanGeneration (0.00s) -=== RUN TestAgentCommand_CleanCodeResponseIntegration ---- PASS: TestAgentCommand_CleanCodeResponseIntegration (0.00s) -=== RUN TestBuildChangelogMessages -=== PAUSE TestBuildChangelogMessages -=== RUN TestBuildFullChangelog -=== PAUSE TestBuildFullChangelog -=== RUN TestChangelogCmd_Flags -=== PAUSE TestChangelogCmd_Flags -=== RUN TestGetChatHistoryFile ---- PASS: TestGetChatHistoryFile (0.00s) -=== RUN TestLoadChatHistory_NoFile ---- PASS: TestLoadChatHistory_NoFile (0.00s) -=== RUN TestSaveAndLoadChatHistory ---- PASS: TestSaveAndLoadChatHistory (0.00s) -=== RUN TestLoadChatHistory_InvalidJSON ---- PASS: TestLoadChatHistory_InvalidJSON (0.00s) -=== RUN TestBuildCommitMessages -=== RUN TestBuildCommitMessages/normal_diff -=== RUN TestBuildCommitMessages/empty_diff ---- PASS: TestBuildCommitMessages (0.00s) - --- PASS: TestBuildCommitMessages/normal_diff (0.00s) - --- PASS: TestBuildCommitMessages/empty_diff (0.00s) -=== RUN TestCompletionCmd -=== RUN TestCompletionCmd/bash -=== RUN TestCompletionCmd/zsh -=== RUN TestCompletionCmd/fish -=== RUN TestCompletionCmd/powershell ---- PASS: TestCompletionCmd (0.00s) - --- PASS: TestCompletionCmd/bash (0.00s) - --- PASS: TestCompletionCmd/zsh (0.00s) - --- PASS: TestCompletionCmd/fish (0.00s) - --- PASS: TestCompletionCmd/powershell (0.00s) -=== RUN TestBuildDocsMessages -=== RUN TestBuildDocsMessages/Go -=== RUN TestBuildDocsMessages/Python -=== RUN TestBuildDocsMessages/C -=== RUN TestBuildDocsMessages/C++ -=== RUN TestBuildDocsMessages/JavaScript -=== RUN TestBuildDocsMessages/TypeScript -=== RUN TestBuildDocsMessages/Rust -=== RUN TestBuildDocsMessages/Ruby -=== RUN TestBuildDocsMessages/Java -=== RUN TestBuildDocsMessages/Shell ---- PASS: TestBuildDocsMessages (0.00s) - --- PASS: TestBuildDocsMessages/Go (0.00s) - --- PASS: TestBuildDocsMessages/Python (0.00s) - --- PASS: TestBuildDocsMessages/C (0.00s) - --- PASS: TestBuildDocsMessages/C++ (0.00s) - --- PASS: TestBuildDocsMessages/JavaScript (0.00s) - --- PASS: TestBuildDocsMessages/TypeScript (0.00s) - --- PASS: TestBuildDocsMessages/Rust (0.00s) - --- PASS: TestBuildDocsMessages/Ruby (0.00s) - --- PASS: TestBuildDocsMessages/Java (0.00s) - --- PASS: TestBuildDocsMessages/Shell (0.00s) -=== RUN TestDocStyle -=== RUN TestDocStyle/go -=== RUN TestDocStyle/Go -=== RUN TestDocStyle/python -=== RUN TestDocStyle/c -=== RUN TestDocStyle/c++ -=== RUN TestDocStyle/javascript -=== RUN TestDocStyle/typescript -=== RUN TestDocStyle/rust -=== RUN TestDocStyle/ruby -=== RUN TestDocStyle/java -=== RUN TestDocStyle/shell -=== RUN TestDocStyle/bash -=== RUN TestDocStyle/unknown ---- PASS: TestDocStyle (0.00s) - --- PASS: TestDocStyle/go (0.00s) - --- PASS: TestDocStyle/Go (0.00s) - --- PASS: TestDocStyle/python (0.00s) - --- PASS: TestDocStyle/c (0.00s) - --- PASS: TestDocStyle/c++ (0.00s) - --- PASS: TestDocStyle/javascript (0.00s) - --- PASS: TestDocStyle/typescript (0.00s) - --- PASS: TestDocStyle/rust (0.00s) - --- PASS: TestDocStyle/ruby (0.00s) - --- PASS: TestDocStyle/java (0.00s) - --- PASS: TestDocStyle/shell (0.00s) - --- PASS: TestDocStyle/bash (0.00s) - --- PASS: TestDocStyle/unknown (0.00s) -=== RUN TestRemoveLastModifiedComments -=== RUN TestRemoveLastModifiedComments/removes_last_modified_comment -=== RUN TestRemoveLastModifiedComments/removes_multiple_last_modified_comments -=== RUN TestRemoveLastModifiedComments/preserves_code_without_last_modified -=== RUN TestRemoveLastModifiedComments/handles_empty_string -=== RUN TestRemoveLastModifiedComments/preserves_other_comments -=== RUN TestRemoveLastModifiedComments/handles_line_with_only_last_modified ---- PASS: TestRemoveLastModifiedComments (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_last_modified_comment (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_multiple_last_modified_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_code_without_last_modified (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_empty_string (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_other_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_line_with_only_last_modified (0.00s) -=== RUN TestEditCommand ---- PASS: TestEditCommand (0.81s) -=== RUN TestBuildHistoryMessages -=== RUN TestBuildHistoryMessages/with_recent_commits -=== RUN TestBuildHistoryMessages/empty_log ---- PASS: TestBuildHistoryMessages (0.00s) - --- PASS: TestBuildHistoryMessages/with_recent_commits (0.00s) - --- PASS: TestBuildHistoryMessages/empty_log (0.00s) -=== RUN TestBuildLintFixMessages -=== RUN TestBuildLintFixMessages/go_file_with_issues -=== RUN TestBuildLintFixMessages/python_file_with_issues ---- PASS: TestBuildLintFixMessages (0.00s) - --- PASS: TestBuildLintFixMessages/go_file_with_issues (0.00s) - --- PASS: TestBuildLintFixMessages/python_file_with_issues (0.00s) -=== RUN TestBuildPRDescribeMessages -=== RUN TestBuildPRDescribeMessages/branch_with_changes -=== RUN TestBuildPRDescribeMessages/empty_diff ---- PASS: TestBuildPRDescribeMessages (0.00s) - --- PASS: TestBuildPRDescribeMessages/branch_with_changes (0.00s) - --- PASS: TestBuildPRDescribeMessages/empty_diff (0.00s) -=== RUN TestBuildReviewMessages -=== RUN TestBuildReviewMessages/with_status_and_diff -=== RUN TestBuildReviewMessages/empty_diff ---- PASS: TestBuildReviewMessages (0.00s) - --- PASS: TestBuildReviewMessages/with_status_and_diff (0.00s) - --- PASS: TestBuildReviewMessages/empty_diff (0.00s) -=== RUN TestExecute -=== RUN TestExecute/version -grokkit version dev (commit )\n=== RUN TestExecute/help -A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow. - -Usage: - grokkit [command] - -Available Commands: - agent Multi-file agent — Grok intelligently edits multiple files with preview - changelog Generate CHANGELOG.md section from git history for Gitea releases - chat Simple interactive CLI chat with Grok (full history + streaming) - commit Generate message and commit staged changes - commit-msg Generate conventional commit message from staged changes - completion Generate shell completion script - docs Generate documentation comments for source files - edit Edit a file in-place with Grok (safe preview) - help Help about any command - history Summarize recent git history - lint Lint a file and optionally apply AI-suggested fixes - pr-describe Generate full PR description from current branch - query One-shot non-interactive query to Grok (programming focused) - query One-shot non-interactive query to Grok (programming focused) - recipe Run a recipe (transactional sous-chef mode) - review Review the current repository or directory - scaffold Scaffold a new file with Grok (safe preview + confirmation) - testgen Generate AI unit tests for files (Go/Python/C/C++, preview/apply) - version Print the version information - -Flags: - --debug Enable debug logging (logs to stderr and file) - -h, --help help for grokkit - -m, --model string Grok model to use (overrides config) - -v, --verbose Enable verbose logging - -Use "grokkit [command] --help" for more information about a command. -=== RUN TestExecute/debug_flag -{"time":"2026-03-06T21:38:16.151535509Z","level":"INFO","msg":"grokkit starting","command":"version","log_level":"debug"} -grokkit version dev (commit )\n=== RUN TestExecute/verbose_flag -grokkit version dev (commit )\n--- PASS: TestExecute (0.00s) - --- PASS: TestExecute/version (0.00s) - --- PASS: TestExecute/help (0.00s) - --- PASS: TestExecute/debug_flag (0.00s) - --- PASS: TestExecute/verbose_flag (0.00s) -=== RUN TestRunHistory -=== RUN TestRunHistory/calls_AI_with_log_output -Summarizing recent commits... -=== RUN TestRunHistory/no_commits_—_skips_AI -No commits found. -=== RUN TestRunHistory/git_error_—_skips_AI -Failed to get git log: not a git repo ---- PASS: TestRunHistory (0.00s) - --- PASS: TestRunHistory/calls_AI_with_log_output (0.00s) - --- PASS: TestRunHistory/no_commits_—_skips_AI (0.00s) - --- PASS: TestRunHistory/git_error_—_skips_AI (0.00s) -=== RUN TestRunReview -=== RUN TestRunReview/reviews_with_diff_and_status -Grok is reviewing the repo... -=== RUN TestRunReview/git_diff_error_—_skips_AI -Failed to get git diff: git error -=== RUN TestRunReview/git_status_error_—_skips_AI -Failed to get git status: git error ---- PASS: TestRunReview (0.00s) - --- PASS: TestRunReview/reviews_with_diff_and_status (0.00s) - --- PASS: TestRunReview/git_diff_error_—_skips_AI (0.00s) - --- PASS: TestRunReview/git_status_error_—_skips_AI (0.00s) -=== RUN TestRunCommit -=== RUN TestRunCommit/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommit/git_error_—_skips_AI -Failed to get staged changes: not a git repo -=== RUN TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin -Generating commit message... - -Proposed commit message: -feat(cmd): add thing -Commit with this message? (y/n): -Aborted. ---- PASS: TestRunCommit (0.00s) - --- PASS: TestRunCommit/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommit/git_error_—_skips_AI (0.00s) - --- PASS: TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin (0.00s) -=== RUN TestRunCommitMsg -=== RUN TestRunCommitMsg/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message -Generating commit message... ---- PASS: TestRunCommitMsg (0.00s) - --- PASS: TestRunCommitMsg/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message (0.00s) -=== RUN TestRunPRDescribe -=== RUN TestRunPRDescribe/no_changes_on_branch_—_skips_AI -No changes on this branch compared to master/origin/master. -=== RUN TestRunPRDescribe/first_diff_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/uses_custom_base_branch -Writing PR description... -=== RUN TestRunPRDescribe/defaults_to_master -Writing PR description... ---- PASS: TestRunPRDescribe (0.00s) - --- PASS: TestRunPRDescribe/no_changes_on_branch_—_skips_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/uses_custom_base_branch (0.00s) - --- PASS: TestRunPRDescribe/defaults_to_master (0.00s) -=== RUN TestRunLintFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestRunLintFileNotFound (0.00s) -=== RUN TestProcessDocsFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestProcessDocsFileNotFound (0.00s) -=== RUN TestProcessDocsFileUnsupportedLanguage -⚠️ Skipping /tmp/test1921082152.xyz: unsupported file type: .xyz ---- PASS: TestProcessDocsFileUnsupportedLanguage (0.00s) -=== RUN TestProcessDocsFilePreviewAndCancel -📝 Generating Go docs for: /tmp/test1474473091.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Foo does nothing. -func Foo() {} --------------------------------------------------------------------------------- - -Apply documentation to /tmp/test1474473091.go? (y/N): -❌ Cancelled. No changes made to: /tmp/test1474473091.go ---- PASS: TestProcessDocsFilePreviewAndCancel (0.00s) -=== RUN TestProcessDocsFileAutoApply -📝 Generating Go docs for: /tmp/test2612240936.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Bar does nothing. -func Bar() {} --------------------------------------------------------------------------------- - -✅ Documentation applied: /tmp/test2612240936.go ---- PASS: TestProcessDocsFileAutoApply (0.00s) -=== RUN TestRunDocs -❌ File not found: /nonexistent/file.go ---- PASS: TestRunDocs (0.00s) -=== RUN TestScaffoldCmd - scaffold_test.go:15: ✓ Fast scaffold unit test (no Grok API call) ---- PASS: TestScaffoldCmd (0.00s) -=== RUN TestScaffoldCmd_Live - scaffold_test.go:22: skipping live Grok integration test. Run with: - go test ./cmd -run TestScaffoldCmd_Live -short -v ---- SKIP: TestScaffoldCmd_Live (0.00s) -=== RUN TestTestgenCmd -=== PAUSE TestTestgenCmd -=== RUN TestTestgenCmd_Live - testgen_test.go:17: skipping live Grok integration test. Run with: - go test ./cmd -run TestTestgenCmd_Live -short -v ---- SKIP: TestTestgenCmd_Live (0.00s) -=== RUN TestRemoveSourceComments -=== PAUSE TestRemoveSourceComments -=== RUN TestGetTestPrompt -=== PAUSE TestGetTestPrompt -=== RUN TestGetTestFilePath -=== PAUSE TestGetTestFilePath -=== RUN TestGetCodeLang -=== PAUSE TestGetCodeLang -=== CONT TestBuildChangelogMessages -=== CONT TestGetCodeLang -=== RUN TestGetCodeLang/Go -=== CONT TestGetTestFilePath ---- PASS: TestBuildChangelogMessages (0.00s) -=== RUN TestGetTestFilePath/foo.go_Go -=== CONT TestBuildFullChangelog -=== RUN TestBuildFullChangelog/creates_new_file_with_header -=== PAUSE TestBuildFullChangelog/creates_new_file_with_header -=== CONT TestGetTestPrompt -=== RUN TestBuildFullChangelog/prepends_to_existing_file -=== PAUSE TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetTestPrompt/Go -=== CONT TestBuildFullChangelog/prepends_to_existing_file -=== CONT TestTestgenCmd -=== PAUSE TestGetTestPrompt/Go -=== CONT TestRemoveSourceComments -=== RUN TestRemoveSourceComments/no_comments -=== NAME TestTestgenCmd - testgen_test.go:12: ✓ Fast testgen unit test (no Grok API call) -=== PAUSE TestRemoveSourceComments/no_comments -=== PAUSE TestGetTestFilePath/foo.go_Go -=== RUN TestRemoveSourceComments/last_modified ---- PASS: TestTestgenCmd (0.00s) -=== PAUSE TestRemoveSourceComments/last_modified -=== CONT TestChangelogCmd_Flags -=== CONT TestBuildFullChangelog/creates_new_file_with_header -=== RUN TestGetTestPrompt/Python -=== PAUSE TestGetCodeLang/Go -=== RUN TestGetTestFilePath/dir/foo.py_Python -=== PAUSE TestGetTestFilePath/dir/foo.py_Python -=== RUN TestRemoveSourceComments/generated_by -=== RUN TestGetCodeLang/Python -=== PAUSE TestRemoveSourceComments/generated_by -=== RUN TestRemoveSourceComments/multiple_removable_lines ---- PASS: TestChangelogCmd_Flags (0.00s) -=== PAUSE TestRemoveSourceComments/multiple_removable_lines -=== PAUSE TestGetTestPrompt/Python -=== RUN TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/C -=== PAUSE TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetTestPrompt/C -=== RUN TestRemoveSourceComments/python_testgen -=== RUN TestGetTestPrompt/C++ -=== PAUSE TestRemoveSourceComments/python_testgen -=== PAUSE TestGetTestPrompt/C++ -=== PAUSE TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/Invalid -=== RUN TestRemoveSourceComments/c_testgen -=== RUN TestGetTestFilePath/baz.cpp_C++ -=== PAUSE TestGetTestPrompt/Invalid -=== PAUSE TestRemoveSourceComments/c_testgen -=== PAUSE TestGetTestFilePath/baz.cpp_C++ -=== CONT TestGetTestPrompt/Python -=== CONT TestRemoveSourceComments/no_comments -=== CONT TestGetTestFilePath/bar.c_C -=== CONT TestGetTestPrompt/C -=== CONT TestGetTestFilePath/dir/foo.py_Python -=== CONT TestRemoveSourceComments/generated_by -=== CONT TestRemoveSourceComments/python_testgen -=== PAUSE TestGetCodeLang/Python -=== CONT TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetCodeLang/C -=== PAUSE TestGetCodeLang/C -=== RUN TestGetCodeLang/C++ -=== PAUSE TestGetCodeLang/C++ ---- PASS: TestBuildFullChangelog (0.00s) - --- PASS: TestBuildFullChangelog/prepends_to_existing_file (0.00s) - --- PASS: TestBuildFullChangelog/creates_new_file_with_header (0.00s) -=== CONT TestRemoveSourceComments/c_testgen -=== CONT TestRemoveSourceComments/multiple_removable_lines -=== CONT TestGetTestFilePath/foo.go_Go -=== CONT TestGetTestPrompt/Go -=== CONT TestGetTestPrompt/Invalid -=== CONT TestGetTestPrompt/C++ ---- PASS: TestGetTestPrompt (0.00s) - --- PASS: TestGetTestPrompt/Python (0.00s) - --- PASS: TestGetTestPrompt/C (0.00s) - --- PASS: TestGetTestPrompt/Go (0.00s) - --- PASS: TestGetTestPrompt/Invalid (0.00s) - --- PASS: TestGetTestPrompt/C++ (0.00s) -=== CONT TestGetTestFilePath/baz.cpp_C++ -=== CONT TestRemoveSourceComments/last_modified -=== CONT TestGetCodeLang/Go ---- PASS: TestGetTestFilePath (0.00s) - --- PASS: TestGetTestFilePath/bar.c_C (0.00s) - --- PASS: TestGetTestFilePath/dir/foo.py_Python (0.00s) - --- PASS: TestGetTestFilePath/foo.go_Go (0.00s) - --- PASS: TestGetTestFilePath/baz.cpp_C++ (0.00s) ---- PASS: TestRemoveSourceComments (0.00s) - --- PASS: TestRemoveSourceComments/no_comments (0.00s) - --- PASS: TestRemoveSourceComments/generated_by (0.00s) - --- PASS: TestRemoveSourceComments/python_testgen (0.00s) - --- PASS: TestRemoveSourceComments/partial_match_no_remove (0.00s) - --- PASS: TestRemoveSourceComments/c_testgen (0.00s) - --- PASS: TestRemoveSourceComments/multiple_removable_lines (0.00s) - --- PASS: TestRemoveSourceComments/last_modified (0.00s) -=== CONT TestGetCodeLang/C++ -=== CONT TestGetCodeLang/Python -=== CONT TestGetCodeLang/C ---- PASS: TestGetCodeLang (0.00s) - --- PASS: TestGetCodeLang/Go (0.00s) - --- PASS: TestGetCodeLang/C++ (0.00s) - --- PASS: TestGetCodeLang/C (0.00s) - --- PASS: TestGetCodeLang/Python (0.00s) -PASS -ok gmgauthier.com/grokkit/cmd (cached) -=== RUN TestGetModel -=== RUN TestGetModel/returns_flag_model_when_provided -=== RUN TestGetModel/returns_default_when_flag_empty ---- PASS: TestGetModel (0.00s) - --- PASS: TestGetModel/returns_flag_model_when_provided (0.00s) - --- PASS: TestGetModel/returns_default_when_flag_empty (0.00s) -=== RUN TestGetModelWithAlias ---- PASS: TestGetModelWithAlias (0.00s) -=== RUN TestGetCommandModel -=== RUN TestGetCommandModel/lint_ -=== RUN TestGetCommandModel/lint_override -=== RUN TestGetCommandModel/other_ -=== RUN TestGetCommandModel/unknown_ ---- PASS: TestGetCommandModel (0.00s) - --- PASS: TestGetCommandModel/lint_ (0.00s) - --- PASS: TestGetCommandModel/lint_override (0.00s) - --- PASS: TestGetCommandModel/other_ (0.00s) - --- PASS: TestGetCommandModel/unknown_ (0.00s) -=== RUN TestLoad ---- PASS: TestLoad (0.00s) -=== RUN TestGetTemperature ---- PASS: TestGetTemperature (0.00s) -=== RUN TestGetTimeout ---- PASS: TestGetTimeout (0.00s) -=== RUN TestGetLogLevel ---- PASS: TestGetLogLevel (0.00s) -PASS -ok gmgauthier.com/grokkit/config (cached) -=== RUN TestGitError ---- PASS: TestGitError (0.00s) -=== RUN TestAPIError -=== RUN TestAPIError/with_status_code -=== RUN TestAPIError/without_status_code ---- PASS: TestAPIError (0.00s) - --- PASS: TestAPIError/with_status_code (0.00s) - --- PASS: TestAPIError/without_status_code (0.00s) -=== RUN TestFileError ---- PASS: TestFileError (0.00s) -=== RUN TestAPIErrorUnwrap ---- PASS: TestAPIErrorUnwrap (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/errors (cached) -=== RUN TestIsRepo ---- PASS: TestIsRepo (0.00s) -=== RUN TestRun -=== RUN TestRun/version_command_succeeds -=== RUN TestRun/invalid_command_fails ---- PASS: TestRun (0.01s) - --- PASS: TestRun/version_command_succeeds (0.00s) - --- PASS: TestRun/invalid_command_fails (0.01s) -=== RUN TestGitRunner ---- PASS: TestGitRunner (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/git (cached) -=== RUN TestCleanCodeResponse_Comprehensive -=== RUN TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/handles_no_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse_Comprehensive/trims_leading_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/handles_multiple_languages -=== RUN TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces -=== RUN TestCleanCodeResponse_Comprehensive/removes_only_fence_lines -=== RUN TestCleanCodeResponse_Comprehensive/handles_empty_input -=== RUN TestCleanCodeResponse_Comprehensive/handles_only_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_code_indentation ---- PASS: TestCleanCodeResponse_Comprehensive (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_leading_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_multiple_languages (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_only_fence_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_empty_input (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_only_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_code_indentation (0.00s) -=== RUN TestCleanCodeResponse -=== RUN TestCleanCodeResponse/removes_markdown_fences -=== RUN TestCleanCodeResponse/removes_language_tag -=== RUN TestCleanCodeResponse/handles_no_fences -=== RUN TestCleanCodeResponse/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse/trims_whitespace ---- PASS: TestCleanCodeResponse (0.00s) - --- PASS: TestCleanCodeResponse/removes_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse/removes_language_tag (0.00s) - --- PASS: TestCleanCodeResponse/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse/trims_whitespace (0.00s) -=== RUN TestStreamSilent ---- PASS: TestStreamSilent (0.00s) -=== RUN TestStream -foobar ---- PASS: TestStream (0.00s) -=== RUN TestStreamWithTemp -response ---- PASS: TestStreamWithTemp (0.00s) -=== RUN TestStreamDoneSignal ---- PASS: TestStreamDoneSignal (0.00s) -=== RUN TestStreamEmptyResponse ---- PASS: TestStreamEmptyResponse (0.00s) -=== RUN TestNewClient ---- PASS: TestNewClient (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/grok (cached) -=== RUN TestDetectLanguage -=== RUN TestDetectLanguage/Go_file -=== RUN TestDetectLanguage/Python_file -=== RUN TestDetectLanguage/JavaScript_file -=== RUN TestDetectLanguage/JSX_file -=== RUN TestDetectLanguage/TypeScript_file -=== RUN TestDetectLanguage/TSX_file -=== RUN TestDetectLanguage/Rust_file -=== RUN TestDetectLanguage/Ruby_file -=== RUN TestDetectLanguage/Java_file -=== RUN TestDetectLanguage/C_file -=== RUN TestDetectLanguage/C++_file -=== RUN TestDetectLanguage/Header_file -=== RUN TestDetectLanguage/Shell_script -=== RUN TestDetectLanguage/Bash_script -=== RUN TestDetectLanguage/Unsupported_file -=== RUN TestDetectLanguage/No_extension -=== RUN TestDetectLanguage/Case_insensitive ---- PASS: TestDetectLanguage (0.00s) - --- PASS: TestDetectLanguage/Go_file (0.00s) - --- PASS: TestDetectLanguage/Python_file (0.00s) - --- PASS: TestDetectLanguage/JavaScript_file (0.00s) - --- PASS: TestDetectLanguage/JSX_file (0.00s) - --- PASS: TestDetectLanguage/TypeScript_file (0.00s) - --- PASS: TestDetectLanguage/TSX_file (0.00s) - --- PASS: TestDetectLanguage/Rust_file (0.00s) - --- PASS: TestDetectLanguage/Ruby_file (0.00s) - --- PASS: TestDetectLanguage/Java_file (0.00s) - --- PASS: TestDetectLanguage/C_file (0.00s) - --- PASS: TestDetectLanguage/C++_file (0.00s) - --- PASS: TestDetectLanguage/Header_file (0.00s) - --- PASS: TestDetectLanguage/Shell_script (0.00s) - --- PASS: TestDetectLanguage/Bash_script (0.00s) - --- PASS: TestDetectLanguage/Unsupported_file (0.00s) - --- PASS: TestDetectLanguage/No_extension (0.00s) - --- PASS: TestDetectLanguage/Case_insensitive (0.00s) -=== RUN TestCheckLinterAvailable -=== RUN TestCheckLinterAvailable/go_command_should_be_available - linter_test.go:84: go should be available on system with Go installed: available=true -=== RUN TestCheckLinterAvailable/nonexistent_command - linter_test.go:84: nonexistent command should not be available: available=false ---- PASS: TestCheckLinterAvailable (0.00s) - --- PASS: TestCheckLinterAvailable/go_command_should_be_available (0.00s) - --- PASS: TestCheckLinterAvailable/nonexistent_command (0.00s) -=== RUN TestFindAvailableLinter -=== RUN TestFindAvailableLinter/Go_language_should_find_a_linter -=== RUN TestFindAvailableLinter/Language_with_no_available_linters ---- PASS: TestFindAvailableLinter (0.00s) - --- PASS: TestFindAvailableLinter/Go_language_should_find_a_linter (0.00s) - --- PASS: TestFindAvailableLinter/Language_with_no_available_linters (0.00s) -=== RUN TestRunLinter -=== RUN TestRunLinter/Run_go_vet_on_valid_file - linter_test.go:179: go vet result: ExitCode=0, HasIssues=false, Output="" -=== RUN TestRunLinter/Run_nonexistent_linter ---- PASS: TestRunLinter (0.07s) - --- PASS: TestRunLinter/Run_go_vet_on_valid_file (0.07s) - --- PASS: TestRunLinter/Run_nonexistent_linter (0.00s) -=== RUN TestLintFile -=== RUN TestLintFile/Lint_valid_Go_file -=== RUN TestLintFile/Lint_nonexistent_file -=== RUN TestLintFile/Lint_unsupported_file_type ---- PASS: TestLintFile (0.16s) - --- PASS: TestLintFile/Lint_valid_Go_file (0.16s) - --- PASS: TestLintFile/Lint_nonexistent_file (0.00s) - --- PASS: TestLintFile/Lint_unsupported_file_type (0.00s) -=== RUN TestGetSupportedLanguages ---- PASS: TestGetSupportedLanguages (0.00s) -=== RUN TestLanguageStructure ---- PASS: TestLanguageStructure (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/linter (cached) -=== RUN TestInit -=== RUN TestInit/default_level -=== RUN TestInit/debug_level -=== RUN TestInit/warn_level -=== RUN TestInit/error_level -=== RUN TestInit/invalid_level_defaults_to_info ---- PASS: TestInit (0.00s) - --- PASS: TestInit/default_level (0.00s) - --- PASS: TestInit/debug_level (0.00s) - --- PASS: TestInit/warn_level (0.00s) - --- PASS: TestInit/error_level (0.00s) - --- PASS: TestInit/invalid_level_defaults_to_info (0.00s) -=== RUN TestLogging -{"time":"2026-03-04T19:52:04.116795514Z","level":"DEBUG","msg":"test debug message","key":"value"} -{"time":"2026-03-04T19:52:04.116935804Z","level":"INFO","msg":"test info message","count":42} -{"time":"2026-03-04T19:52:04.116957313Z","level":"WARN","msg":"test warn message","enabled":true} -{"time":"2026-03-04T19:52:04.116977684Z","level":"ERROR","msg":"test error message","error":"something went wrong"} ---- PASS: TestLogging (0.00s) -=== RUN TestSetLevel ---- PASS: TestSetLevel (0.00s) -=== RUN TestWith ---- PASS: TestWith (0.00s) -=== RUN TestWithContext -=== RUN TestWithContext/without_init -=== RUN TestWithContext/with_init ---- PASS: TestWithContext (0.00s) - --- PASS: TestWithContext/without_init (0.00s) - --- PASS: TestWithContext/with_init (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/logger (cached) -=== RUN TestExtractCodeBlocks -=== PAUSE TestExtractCodeBlocks -=== CONT TestExtractCodeBlocks -=== RUN TestExtractCodeBlocks/Single_block -=== RUN TestExtractCodeBlocks/Multiple_blocks -=== RUN TestExtractCodeBlocks/No_blocks -=== RUN TestExtractCodeBlocks/Incomplete_block ---- PASS: TestExtractCodeBlocks (0.00s) - --- PASS: TestExtractCodeBlocks/Single_block (0.00s) - --- PASS: TestExtractCodeBlocks/Multiple_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/No_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/Incomplete_block (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/recipe (cached) -=== RUN TestVersionInfo -=== PAUSE TestVersionInfo -=== CONT TestVersionInfo -=== RUN TestVersionInfo/Version -=== PAUSE TestVersionInfo/Version -=== RUN TestVersionInfo/Commit -=== PAUSE TestVersionInfo/Commit -=== RUN TestVersionInfo/BuildDate -=== PAUSE TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Version -=== CONT TestVersionInfo/Commit -=== CONT TestVersionInfo/BuildDate ---- PASS: TestVersionInfo (0.00s) - --- PASS: TestVersionInfo/Version (0.00s) - --- PASS: TestVersionInfo/Commit (0.00s) - --- PASS: TestVersionInfo/BuildDate (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/version (cached) diff --git a/test_output_fresh.txt b/test_output_fresh.txt deleted file mode 100644 index 31c7f2a..0000000 --- a/test_output_fresh.txt +++ /dev/null @@ -1,644 +0,0 @@ -? gmgauthier.com/grokkit [no test files] -=== RUN TestAgentCommand_PlanGeneration - agent_test.go:8: Agent plan generation test placeholder — ready for expansion ---- PASS: TestAgentCommand_PlanGeneration (0.00s) -=== RUN TestAgentCommand_CleanCodeResponseIntegration ---- PASS: TestAgentCommand_CleanCodeResponseIntegration (0.00s) -=== RUN TestBuildChangelogMessages -=== PAUSE TestBuildChangelogMessages -=== RUN TestBuildFullChangelog -=== PAUSE TestBuildFullChangelog -=== RUN TestChangelogCmd_Flags -=== PAUSE TestChangelogCmd_Flags -=== RUN TestGetChatHistoryFile ---- PASS: TestGetChatHistoryFile (0.00s) -=== RUN TestLoadChatHistory_NoFile ---- PASS: TestLoadChatHistory_NoFile (0.00s) -=== RUN TestSaveAndLoadChatHistory ---- PASS: TestSaveAndLoadChatHistory (0.00s) -=== RUN TestLoadChatHistory_InvalidJSON ---- PASS: TestLoadChatHistory_InvalidJSON (0.00s) -=== RUN TestBuildCommitMessages -=== RUN TestBuildCommitMessages/normal_diff -=== RUN TestBuildCommitMessages/empty_diff ---- PASS: TestBuildCommitMessages (0.00s) - --- PASS: TestBuildCommitMessages/normal_diff (0.00s) - --- PASS: TestBuildCommitMessages/empty_diff (0.00s) -=== RUN TestCompletionCmd -=== RUN TestCompletionCmd/bash -=== RUN TestCompletionCmd/zsh -=== RUN TestCompletionCmd/fish -=== RUN TestCompletionCmd/powershell ---- PASS: TestCompletionCmd (0.00s) - --- PASS: TestCompletionCmd/bash (0.00s) - --- PASS: TestCompletionCmd/zsh (0.00s) - --- PASS: TestCompletionCmd/fish (0.00s) - --- PASS: TestCompletionCmd/powershell (0.00s) -=== RUN TestBuildDocsMessages -=== RUN TestBuildDocsMessages/Go -=== RUN TestBuildDocsMessages/Python -=== RUN TestBuildDocsMessages/C -=== RUN TestBuildDocsMessages/C++ -=== RUN TestBuildDocsMessages/JavaScript -=== RUN TestBuildDocsMessages/TypeScript -=== RUN TestBuildDocsMessages/Rust -=== RUN TestBuildDocsMessages/Ruby -=== RUN TestBuildDocsMessages/Java -=== RUN TestBuildDocsMessages/Shell ---- PASS: TestBuildDocsMessages (0.00s) - --- PASS: TestBuildDocsMessages/Go (0.00s) - --- PASS: TestBuildDocsMessages/Python (0.00s) - --- PASS: TestBuildDocsMessages/C (0.00s) - --- PASS: TestBuildDocsMessages/C++ (0.00s) - --- PASS: TestBuildDocsMessages/JavaScript (0.00s) - --- PASS: TestBuildDocsMessages/TypeScript (0.00s) - --- PASS: TestBuildDocsMessages/Rust (0.00s) - --- PASS: TestBuildDocsMessages/Ruby (0.00s) - --- PASS: TestBuildDocsMessages/Java (0.00s) - --- PASS: TestBuildDocsMessages/Shell (0.00s) -=== RUN TestDocStyle -=== RUN TestDocStyle/go -=== RUN TestDocStyle/Go -=== RUN TestDocStyle/python -=== RUN TestDocStyle/c -=== RUN TestDocStyle/c++ -=== RUN TestDocStyle/javascript -=== RUN TestDocStyle/typescript -=== RUN TestDocStyle/rust -=== RUN TestDocStyle/ruby -=== RUN TestDocStyle/java -=== RUN TestDocStyle/shell -=== RUN TestDocStyle/bash -=== RUN TestDocStyle/unknown ---- PASS: TestDocStyle (0.00s) - --- PASS: TestDocStyle/go (0.00s) - --- PASS: TestDocStyle/Go (0.00s) - --- PASS: TestDocStyle/python (0.00s) - --- PASS: TestDocStyle/c (0.00s) - --- PASS: TestDocStyle/c++ (0.00s) - --- PASS: TestDocStyle/javascript (0.00s) - --- PASS: TestDocStyle/typescript (0.00s) - --- PASS: TestDocStyle/rust (0.00s) - --- PASS: TestDocStyle/ruby (0.00s) - --- PASS: TestDocStyle/java (0.00s) - --- PASS: TestDocStyle/shell (0.00s) - --- PASS: TestDocStyle/bash (0.00s) - --- PASS: TestDocStyle/unknown (0.00s) -=== RUN TestRemoveLastModifiedComments -=== RUN TestRemoveLastModifiedComments/removes_last_modified_comment -=== RUN TestRemoveLastModifiedComments/removes_multiple_last_modified_comments -=== RUN TestRemoveLastModifiedComments/preserves_code_without_last_modified -=== RUN TestRemoveLastModifiedComments/handles_empty_string -=== RUN TestRemoveLastModifiedComments/preserves_other_comments -=== RUN TestRemoveLastModifiedComments/handles_line_with_only_last_modified ---- PASS: TestRemoveLastModifiedComments (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_last_modified_comment (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_multiple_last_modified_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_code_without_last_modified (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_empty_string (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_other_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_line_with_only_last_modified (0.00s) -=== RUN TestEditCommand ---- PASS: TestEditCommand (0.68s) -=== RUN TestBuildHistoryMessages -=== RUN TestBuildHistoryMessages/with_recent_commits -=== RUN TestBuildHistoryMessages/empty_log ---- PASS: TestBuildHistoryMessages (0.00s) - --- PASS: TestBuildHistoryMessages/with_recent_commits (0.00s) - --- PASS: TestBuildHistoryMessages/empty_log (0.00s) -=== RUN TestBuildLintFixMessages -=== RUN TestBuildLintFixMessages/go_file_with_issues -=== RUN TestBuildLintFixMessages/python_file_with_issues ---- PASS: TestBuildLintFixMessages (0.00s) - --- PASS: TestBuildLintFixMessages/go_file_with_issues (0.00s) - --- PASS: TestBuildLintFixMessages/python_file_with_issues (0.00s) -=== RUN TestBuildPRDescribeMessages -=== RUN TestBuildPRDescribeMessages/branch_with_changes -=== RUN TestBuildPRDescribeMessages/empty_diff ---- PASS: TestBuildPRDescribeMessages (0.00s) - --- PASS: TestBuildPRDescribeMessages/branch_with_changes (0.00s) - --- PASS: TestBuildPRDescribeMessages/empty_diff (0.00s) -=== RUN TestBuildReviewMessages -=== RUN TestBuildReviewMessages/with_status_and_diff -=== RUN TestBuildReviewMessages/empty_diff ---- PASS: TestBuildReviewMessages (0.00s) - --- PASS: TestBuildReviewMessages/with_status_and_diff (0.00s) - --- PASS: TestBuildReviewMessages/empty_diff (0.00s) -=== RUN TestExecute -=== RUN TestExecute/version -grokkit version dev (commit )\n=== RUN TestExecute/help -A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow. - -Usage: - grokkit [command] - -Available Commands: - agent Multi-file agent — Grok intelligently edits multiple files with preview - changelog Generate CHANGELOG.md section from git history for Gitea releases - chat Simple interactive CLI chat with Grok (full history + streaming) - commit Generate message and commit staged changes - commit-msg Generate conventional commit message from staged changes - completion Generate shell completion script - docs Generate documentation comments for source files - edit Edit a file in-place with Grok (safe preview) - help Help about any command - history Summarize recent git history - lint Lint a file and optionally apply AI-suggested fixes - pr-describe Generate full PR description from current branch - query One-shot non-interactive query to Grok (programming focused) - query One-shot non-interactive query to Grok (programming focused) - recipe Run a recipe (transactional sous-chef mode) - review Review the current repository or directory - scaffold Scaffold a new file with Grok (safe preview + confirmation) - testgen Generate AI unit tests for files (Go/Python/C/C++, preview/apply) - version Print the version information - -Flags: - --debug Enable debug logging (logs to stderr and file) - -h, --help help for grokkit - -m, --model string Grok model to use (overrides config) - -v, --verbose Enable verbose logging - -Use "grokkit [command] --help" for more information about a command. -=== RUN TestExecute/debug_flag -{"time":"2026-03-06T21:37:40.647542566Z","level":"INFO","msg":"grokkit starting","command":"version","log_level":"debug"} -grokkit version dev (commit )\n=== RUN TestExecute/verbose_flag -grokkit version dev (commit )\n--- PASS: TestExecute (0.00s) - --- PASS: TestExecute/version (0.00s) - --- PASS: TestExecute/help (0.00s) - --- PASS: TestExecute/debug_flag (0.00s) - --- PASS: TestExecute/verbose_flag (0.00s) -=== RUN TestRunHistory -=== RUN TestRunHistory/calls_AI_with_log_output -Summarizing recent commits... -=== RUN TestRunHistory/no_commits_—_skips_AI -No commits found. -=== RUN TestRunHistory/git_error_—_skips_AI -Failed to get git log: not a git repo ---- PASS: TestRunHistory (0.00s) - --- PASS: TestRunHistory/calls_AI_with_log_output (0.00s) - --- PASS: TestRunHistory/no_commits_—_skips_AI (0.00s) - --- PASS: TestRunHistory/git_error_—_skips_AI (0.00s) -=== RUN TestRunReview -=== RUN TestRunReview/reviews_with_diff_and_status -Grok is reviewing the repo... -=== RUN TestRunReview/git_diff_error_—_skips_AI -Failed to get git diff: git error -=== RUN TestRunReview/git_status_error_—_skips_AI -Failed to get git status: git error ---- PASS: TestRunReview (0.00s) - --- PASS: TestRunReview/reviews_with_diff_and_status (0.00s) - --- PASS: TestRunReview/git_diff_error_—_skips_AI (0.00s) - --- PASS: TestRunReview/git_status_error_—_skips_AI (0.00s) -=== RUN TestRunCommit -=== RUN TestRunCommit/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommit/git_error_—_skips_AI -Failed to get staged changes: not a git repo -=== RUN TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin -Generating commit message... - -Proposed commit message: -feat(cmd): add thing -Commit with this message? (y/n): -Aborted. ---- PASS: TestRunCommit (0.00s) - --- PASS: TestRunCommit/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommit/git_error_—_skips_AI (0.00s) - --- PASS: TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin (0.00s) -=== RUN TestRunCommitMsg -=== RUN TestRunCommitMsg/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message -Generating commit message... ---- PASS: TestRunCommitMsg (0.00s) - --- PASS: TestRunCommitMsg/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message (0.00s) -=== RUN TestRunPRDescribe -=== RUN TestRunPRDescribe/no_changes_on_branch_—_skips_AI -No changes on this branch compared to master/origin/master. -=== RUN TestRunPRDescribe/first_diff_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/uses_custom_base_branch -Writing PR description... -=== RUN TestRunPRDescribe/defaults_to_master -Writing PR description... ---- PASS: TestRunPRDescribe (0.00s) - --- PASS: TestRunPRDescribe/no_changes_on_branch_—_skips_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/uses_custom_base_branch (0.00s) - --- PASS: TestRunPRDescribe/defaults_to_master (0.00s) -=== RUN TestRunLintFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestRunLintFileNotFound (0.00s) -=== RUN TestProcessDocsFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestProcessDocsFileNotFound (0.00s) -=== RUN TestProcessDocsFileUnsupportedLanguage -⚠️ Skipping /tmp/test2101107302.xyz: unsupported file type: .xyz ---- PASS: TestProcessDocsFileUnsupportedLanguage (0.00s) -=== RUN TestProcessDocsFilePreviewAndCancel -📝 Generating Go docs for: /tmp/test533748323.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Foo does nothing. -func Foo() {} --------------------------------------------------------------------------------- - -Apply documentation to /tmp/test533748323.go? (y/N): -❌ Cancelled. No changes made to: /tmp/test533748323.go ---- PASS: TestProcessDocsFilePreviewAndCancel (0.00s) -=== RUN TestProcessDocsFileAutoApply -📝 Generating Go docs for: /tmp/test2461183796.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Bar does nothing. -func Bar() {} --------------------------------------------------------------------------------- - -✅ Documentation applied: /tmp/test2461183796.go ---- PASS: TestProcessDocsFileAutoApply (0.00s) -=== RUN TestRunDocs -❌ File not found: /nonexistent/file.go ---- PASS: TestRunDocs (0.00s) -=== RUN TestScaffoldCmd - scaffold_test.go:15: ✓ Fast scaffold unit test (no Grok API call) ---- PASS: TestScaffoldCmd (0.00s) -=== RUN TestScaffoldCmd_Live - scaffold_test.go:22: skipping live Grok integration test. Run with: - go test ./cmd -run TestScaffoldCmd_Live -short -v ---- SKIP: TestScaffoldCmd_Live (0.00s) -=== RUN TestTestgenCmd -=== PAUSE TestTestgenCmd -=== RUN TestTestgenCmd_Live - testgen_test.go:17: skipping live Grok integration test. Run with: - go test ./cmd -run TestTestgenCmd_Live -short -v ---- SKIP: TestTestgenCmd_Live (0.00s) -=== RUN TestRemoveSourceComments -=== PAUSE TestRemoveSourceComments -=== RUN TestGetTestPrompt -=== PAUSE TestGetTestPrompt -=== RUN TestGetTestFilePath -=== PAUSE TestGetTestFilePath -=== RUN TestGetCodeLang -=== PAUSE TestGetCodeLang -=== CONT TestBuildChangelogMessages -=== CONT TestRemoveSourceComments ---- PASS: TestBuildChangelogMessages (0.00s) -=== CONT TestGetCodeLang -=== RUN TestRemoveSourceComments/no_comments -=== RUN TestGetCodeLang/Go -=== PAUSE TestRemoveSourceComments/no_comments -=== CONT TestChangelogCmd_Flags -=== RUN TestRemoveSourceComments/last_modified -=== CONT TestGetTestFilePath -=== PAUSE TestRemoveSourceComments/last_modified -=== RUN TestGetTestFilePath/foo.go_Go -=== RUN TestRemoveSourceComments/generated_by -=== PAUSE TestRemoveSourceComments/generated_by -=== CONT TestTestgenCmd -=== RUN TestRemoveSourceComments/multiple_removable_lines -=== PAUSE TestGetTestFilePath/foo.go_Go -=== PAUSE TestRemoveSourceComments/multiple_removable_lines -=== RUN TestGetTestFilePath/dir/foo.py_Python ---- PASS: TestChangelogCmd_Flags (0.00s) -=== RUN TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetTestFilePath/dir/foo.py_Python -=== PAUSE TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetTestFilePath/bar.c_C -=== RUN TestRemoveSourceComments/python_testgen -=== CONT TestGetTestPrompt -=== PAUSE TestRemoveSourceComments/python_testgen -=== PAUSE TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/Go -=== RUN TestGetTestFilePath/baz.cpp_C++ -=== RUN TestRemoveSourceComments/c_testgen -=== PAUSE TestGetTestFilePath/baz.cpp_C++ -=== PAUSE TestGetTestPrompt/Go -=== CONT TestGetTestFilePath/dir/foo.py_Python -=== RUN TestGetTestPrompt/Python -=== PAUSE TestGetTestPrompt/Python -=== RUN TestGetTestPrompt/C -=== CONT TestGetTestFilePath/foo.go_Go -=== PAUSE TestGetTestPrompt/C -=== NAME TestTestgenCmd - testgen_test.go:12: ✓ Fast testgen unit test (no Grok API call) -=== RUN TestGetTestPrompt/C++ ---- PASS: TestTestgenCmd (0.00s) -=== PAUSE TestGetTestPrompt/C++ -=== CONT TestBuildFullChangelog -=== RUN TestGetTestPrompt/Invalid -=== PAUSE TestGetTestPrompt/Invalid -=== CONT TestGetTestFilePath/baz.cpp_C++ -=== CONT TestGetTestPrompt/Invalid -=== RUN TestBuildFullChangelog/creates_new_file_with_header -=== CONT TestGetTestPrompt/C++ -=== CONT TestGetTestPrompt/Python -=== PAUSE TestBuildFullChangelog/creates_new_file_with_header -=== PAUSE TestGetCodeLang/Go -=== RUN TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetCodeLang/Python -=== PAUSE TestBuildFullChangelog/prepends_to_existing_file -=== PAUSE TestGetCodeLang/Python -=== CONT TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetCodeLang/C -=== PAUSE TestGetCodeLang/C -=== RUN TestGetCodeLang/C++ -=== PAUSE TestGetCodeLang/C++ -=== CONT TestGetCodeLang/Go -=== CONT TestGetCodeLang/C++ -=== CONT TestGetTestFilePath/bar.c_C -=== CONT TestGetCodeLang/C -=== CONT TestGetCodeLang/Python -=== PAUSE TestRemoveSourceComments/c_testgen ---- PASS: TestGetTestFilePath (0.00s) - --- PASS: TestGetTestFilePath/dir/foo.py_Python (0.00s) - --- PASS: TestGetTestFilePath/foo.go_Go (0.00s) - --- PASS: TestGetTestFilePath/baz.cpp_C++ (0.00s) - --- PASS: TestGetTestFilePath/bar.c_C (0.00s) -=== CONT TestGetTestPrompt/Go -=== CONT TestRemoveSourceComments/partial_match_no_remove ---- PASS: TestGetCodeLang (0.00s) - --- PASS: TestGetCodeLang/Go (0.00s) - --- PASS: TestGetCodeLang/C++ (0.00s) - --- PASS: TestGetCodeLang/C (0.00s) - --- PASS: TestGetCodeLang/Python (0.00s) -=== CONT TestRemoveSourceComments/last_modified -=== CONT TestRemoveSourceComments/c_testgen -=== CONT TestGetTestPrompt/C -=== CONT TestRemoveSourceComments/python_testgen -=== CONT TestBuildFullChangelog/creates_new_file_with_header ---- PASS: TestGetTestPrompt (0.00s) - --- PASS: TestGetTestPrompt/Invalid (0.00s) - --- PASS: TestGetTestPrompt/C++ (0.00s) - --- PASS: TestGetTestPrompt/Python (0.00s) - --- PASS: TestGetTestPrompt/Go (0.00s) - --- PASS: TestGetTestPrompt/C (0.00s) -=== CONT TestRemoveSourceComments/no_comments -=== CONT TestRemoveSourceComments/multiple_removable_lines -=== CONT TestRemoveSourceComments/generated_by ---- PASS: TestRemoveSourceComments (0.00s) - --- PASS: TestRemoveSourceComments/partial_match_no_remove (0.00s) - --- PASS: TestRemoveSourceComments/last_modified (0.00s) - --- PASS: TestRemoveSourceComments/python_testgen (0.00s) - --- PASS: TestRemoveSourceComments/c_testgen (0.00s) - --- PASS: TestRemoveSourceComments/no_comments (0.00s) - --- PASS: TestRemoveSourceComments/multiple_removable_lines (0.00s) - --- PASS: TestRemoveSourceComments/generated_by (0.00s) ---- PASS: TestBuildFullChangelog (0.00s) - --- PASS: TestBuildFullChangelog/prepends_to_existing_file (0.00s) - --- PASS: TestBuildFullChangelog/creates_new_file_with_header (0.00s) -PASS -ok gmgauthier.com/grokkit/cmd (cached) -=== RUN TestGetModel -=== RUN TestGetModel/returns_flag_model_when_provided -=== RUN TestGetModel/returns_default_when_flag_empty ---- PASS: TestGetModel (0.00s) - --- PASS: TestGetModel/returns_flag_model_when_provided (0.00s) - --- PASS: TestGetModel/returns_default_when_flag_empty (0.00s) -=== RUN TestGetModelWithAlias ---- PASS: TestGetModelWithAlias (0.00s) -=== RUN TestGetCommandModel -=== RUN TestGetCommandModel/lint_ -=== RUN TestGetCommandModel/lint_override -=== RUN TestGetCommandModel/other_ -=== RUN TestGetCommandModel/unknown_ ---- PASS: TestGetCommandModel (0.00s) - --- PASS: TestGetCommandModel/lint_ (0.00s) - --- PASS: TestGetCommandModel/lint_override (0.00s) - --- PASS: TestGetCommandModel/other_ (0.00s) - --- PASS: TestGetCommandModel/unknown_ (0.00s) -=== RUN TestLoad ---- PASS: TestLoad (0.00s) -=== RUN TestGetTemperature ---- PASS: TestGetTemperature (0.00s) -=== RUN TestGetTimeout ---- PASS: TestGetTimeout (0.00s) -=== RUN TestGetLogLevel ---- PASS: TestGetLogLevel (0.00s) -PASS -ok gmgauthier.com/grokkit/config (cached) -=== RUN TestGitError ---- PASS: TestGitError (0.00s) -=== RUN TestAPIError -=== RUN TestAPIError/with_status_code -=== RUN TestAPIError/without_status_code ---- PASS: TestAPIError (0.00s) - --- PASS: TestAPIError/with_status_code (0.00s) - --- PASS: TestAPIError/without_status_code (0.00s) -=== RUN TestFileError ---- PASS: TestFileError (0.00s) -=== RUN TestAPIErrorUnwrap ---- PASS: TestAPIErrorUnwrap (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/errors (cached) -=== RUN TestIsRepo ---- PASS: TestIsRepo (0.00s) -=== RUN TestRun -=== RUN TestRun/version_command_succeeds -=== RUN TestRun/invalid_command_fails ---- PASS: TestRun (0.01s) - --- PASS: TestRun/version_command_succeeds (0.00s) - --- PASS: TestRun/invalid_command_fails (0.01s) -=== RUN TestGitRunner ---- PASS: TestGitRunner (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/git (cached) -=== RUN TestCleanCodeResponse_Comprehensive -=== RUN TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/handles_no_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse_Comprehensive/trims_leading_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/handles_multiple_languages -=== RUN TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces -=== RUN TestCleanCodeResponse_Comprehensive/removes_only_fence_lines -=== RUN TestCleanCodeResponse_Comprehensive/handles_empty_input -=== RUN TestCleanCodeResponse_Comprehensive/handles_only_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_code_indentation ---- PASS: TestCleanCodeResponse_Comprehensive (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_leading_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_multiple_languages (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_only_fence_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_empty_input (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_only_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_code_indentation (0.00s) -=== RUN TestCleanCodeResponse -=== RUN TestCleanCodeResponse/removes_markdown_fences -=== RUN TestCleanCodeResponse/removes_language_tag -=== RUN TestCleanCodeResponse/handles_no_fences -=== RUN TestCleanCodeResponse/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse/trims_whitespace ---- PASS: TestCleanCodeResponse (0.00s) - --- PASS: TestCleanCodeResponse/removes_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse/removes_language_tag (0.00s) - --- PASS: TestCleanCodeResponse/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse/trims_whitespace (0.00s) -=== RUN TestStreamSilent ---- PASS: TestStreamSilent (0.00s) -=== RUN TestStream -foobar ---- PASS: TestStream (0.00s) -=== RUN TestStreamWithTemp -response ---- PASS: TestStreamWithTemp (0.00s) -=== RUN TestStreamDoneSignal ---- PASS: TestStreamDoneSignal (0.00s) -=== RUN TestStreamEmptyResponse ---- PASS: TestStreamEmptyResponse (0.00s) -=== RUN TestNewClient ---- PASS: TestNewClient (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/grok (cached) -=== RUN TestDetectLanguage -=== RUN TestDetectLanguage/Go_file -=== RUN TestDetectLanguage/Python_file -=== RUN TestDetectLanguage/JavaScript_file -=== RUN TestDetectLanguage/JSX_file -=== RUN TestDetectLanguage/TypeScript_file -=== RUN TestDetectLanguage/TSX_file -=== RUN TestDetectLanguage/Rust_file -=== RUN TestDetectLanguage/Ruby_file -=== RUN TestDetectLanguage/Java_file -=== RUN TestDetectLanguage/C_file -=== RUN TestDetectLanguage/C++_file -=== RUN TestDetectLanguage/Header_file -=== RUN TestDetectLanguage/Shell_script -=== RUN TestDetectLanguage/Bash_script -=== RUN TestDetectLanguage/Unsupported_file -=== RUN TestDetectLanguage/No_extension -=== RUN TestDetectLanguage/Case_insensitive ---- PASS: TestDetectLanguage (0.00s) - --- PASS: TestDetectLanguage/Go_file (0.00s) - --- PASS: TestDetectLanguage/Python_file (0.00s) - --- PASS: TestDetectLanguage/JavaScript_file (0.00s) - --- PASS: TestDetectLanguage/JSX_file (0.00s) - --- PASS: TestDetectLanguage/TypeScript_file (0.00s) - --- PASS: TestDetectLanguage/TSX_file (0.00s) - --- PASS: TestDetectLanguage/Rust_file (0.00s) - --- PASS: TestDetectLanguage/Ruby_file (0.00s) - --- PASS: TestDetectLanguage/Java_file (0.00s) - --- PASS: TestDetectLanguage/C_file (0.00s) - --- PASS: TestDetectLanguage/C++_file (0.00s) - --- PASS: TestDetectLanguage/Header_file (0.00s) - --- PASS: TestDetectLanguage/Shell_script (0.00s) - --- PASS: TestDetectLanguage/Bash_script (0.00s) - --- PASS: TestDetectLanguage/Unsupported_file (0.00s) - --- PASS: TestDetectLanguage/No_extension (0.00s) - --- PASS: TestDetectLanguage/Case_insensitive (0.00s) -=== RUN TestCheckLinterAvailable -=== RUN TestCheckLinterAvailable/go_command_should_be_available - linter_test.go:84: go should be available on system with Go installed: available=true -=== RUN TestCheckLinterAvailable/nonexistent_command - linter_test.go:84: nonexistent command should not be available: available=false ---- PASS: TestCheckLinterAvailable (0.00s) - --- PASS: TestCheckLinterAvailable/go_command_should_be_available (0.00s) - --- PASS: TestCheckLinterAvailable/nonexistent_command (0.00s) -=== RUN TestFindAvailableLinter -=== RUN TestFindAvailableLinter/Go_language_should_find_a_linter -=== RUN TestFindAvailableLinter/Language_with_no_available_linters ---- PASS: TestFindAvailableLinter (0.00s) - --- PASS: TestFindAvailableLinter/Go_language_should_find_a_linter (0.00s) - --- PASS: TestFindAvailableLinter/Language_with_no_available_linters (0.00s) -=== RUN TestRunLinter -=== RUN TestRunLinter/Run_go_vet_on_valid_file - linter_test.go:179: go vet result: ExitCode=0, HasIssues=false, Output="" -=== RUN TestRunLinter/Run_nonexistent_linter ---- PASS: TestRunLinter (0.09s) - --- PASS: TestRunLinter/Run_go_vet_on_valid_file (0.09s) - --- PASS: TestRunLinter/Run_nonexistent_linter (0.00s) -=== RUN TestLintFile -=== RUN TestLintFile/Lint_valid_Go_file -=== RUN TestLintFile/Lint_nonexistent_file -=== RUN TestLintFile/Lint_unsupported_file_type ---- PASS: TestLintFile (0.23s) - --- PASS: TestLintFile/Lint_valid_Go_file (0.23s) - --- PASS: TestLintFile/Lint_nonexistent_file (0.00s) - --- PASS: TestLintFile/Lint_unsupported_file_type (0.00s) -=== RUN TestGetSupportedLanguages ---- PASS: TestGetSupportedLanguages (0.00s) -=== RUN TestLanguageStructure ---- PASS: TestLanguageStructure (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/linter (cached) -=== RUN TestInit -=== RUN TestInit/default_level -=== RUN TestInit/debug_level -=== RUN TestInit/warn_level -=== RUN TestInit/error_level -=== RUN TestInit/invalid_level_defaults_to_info ---- PASS: TestInit (0.00s) - --- PASS: TestInit/default_level (0.00s) - --- PASS: TestInit/debug_level (0.00s) - --- PASS: TestInit/warn_level (0.00s) - --- PASS: TestInit/error_level (0.00s) - --- PASS: TestInit/invalid_level_defaults_to_info (0.00s) -=== RUN TestLogging -{"time":"2026-03-06T21:37:18.86971947Z","level":"DEBUG","msg":"test debug message","key":"value"} -{"time":"2026-03-06T21:37:18.869798249Z","level":"INFO","msg":"test info message","count":42} -{"time":"2026-03-06T21:37:18.869804305Z","level":"WARN","msg":"test warn message","enabled":true} -{"time":"2026-03-06T21:37:18.869808331Z","level":"ERROR","msg":"test error message","error":"something went wrong"} ---- PASS: TestLogging (0.00s) -=== RUN TestSetLevel ---- PASS: TestSetLevel (0.00s) -=== RUN TestWith ---- PASS: TestWith (0.00s) -=== RUN TestWithContext -=== RUN TestWithContext/without_init -=== RUN TestWithContext/with_init ---- PASS: TestWithContext (0.00s) - --- PASS: TestWithContext/without_init (0.00s) - --- PASS: TestWithContext/with_init (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/logger (cached) -=== RUN TestExtractCodeBlocks -=== PAUSE TestExtractCodeBlocks -=== CONT TestExtractCodeBlocks -=== RUN TestExtractCodeBlocks/Single_block -=== RUN TestExtractCodeBlocks/Multiple_blocks -=== RUN TestExtractCodeBlocks/No_blocks -=== RUN TestExtractCodeBlocks/Incomplete_block ---- PASS: TestExtractCodeBlocks (0.00s) - --- PASS: TestExtractCodeBlocks/Single_block (0.00s) - --- PASS: TestExtractCodeBlocks/Multiple_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/No_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/Incomplete_block (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/recipe (cached) -=== RUN TestVersionInfo -=== PAUSE TestVersionInfo -=== CONT TestVersionInfo -=== RUN TestVersionInfo/Version -=== PAUSE TestVersionInfo/Version -=== RUN TestVersionInfo/Commit -=== PAUSE TestVersionInfo/Commit -=== RUN TestVersionInfo/BuildDate -=== PAUSE TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Version -=== CONT TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Commit ---- PASS: TestVersionInfo (0.00s) - --- PASS: TestVersionInfo/Version (0.00s) - --- PASS: TestVersionInfo/BuildDate (0.00s) - --- PASS: TestVersionInfo/Commit (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/version (cached) diff --git a/test_output_race.txt b/test_output_race.txt deleted file mode 100644 index 303b77b..0000000 --- a/test_output_race.txt +++ /dev/null @@ -1,644 +0,0 @@ -? gmgauthier.com/grokkit [no test files] -=== RUN TestAgentCommand_PlanGeneration - agent_test.go:8: Agent plan generation test placeholder — ready for expansion ---- PASS: TestAgentCommand_PlanGeneration (0.00s) -=== RUN TestAgentCommand_CleanCodeResponseIntegration ---- PASS: TestAgentCommand_CleanCodeResponseIntegration (0.00s) -=== RUN TestBuildChangelogMessages -=== PAUSE TestBuildChangelogMessages -=== RUN TestBuildFullChangelog -=== PAUSE TestBuildFullChangelog -=== RUN TestChangelogCmd_Flags -=== PAUSE TestChangelogCmd_Flags -=== RUN TestGetChatHistoryFile ---- PASS: TestGetChatHistoryFile (0.00s) -=== RUN TestLoadChatHistory_NoFile ---- PASS: TestLoadChatHistory_NoFile (0.00s) -=== RUN TestSaveAndLoadChatHistory ---- PASS: TestSaveAndLoadChatHistory (0.00s) -=== RUN TestLoadChatHistory_InvalidJSON ---- PASS: TestLoadChatHistory_InvalidJSON (0.00s) -=== RUN TestBuildCommitMessages -=== RUN TestBuildCommitMessages/normal_diff -=== RUN TestBuildCommitMessages/empty_diff ---- PASS: TestBuildCommitMessages (0.00s) - --- PASS: TestBuildCommitMessages/normal_diff (0.00s) - --- PASS: TestBuildCommitMessages/empty_diff (0.00s) -=== RUN TestCompletionCmd -=== RUN TestCompletionCmd/bash -=== RUN TestCompletionCmd/zsh -=== RUN TestCompletionCmd/fish -=== RUN TestCompletionCmd/powershell ---- PASS: TestCompletionCmd (0.00s) - --- PASS: TestCompletionCmd/bash (0.00s) - --- PASS: TestCompletionCmd/zsh (0.00s) - --- PASS: TestCompletionCmd/fish (0.00s) - --- PASS: TestCompletionCmd/powershell (0.00s) -=== RUN TestBuildDocsMessages -=== RUN TestBuildDocsMessages/Go -=== RUN TestBuildDocsMessages/Python -=== RUN TestBuildDocsMessages/C -=== RUN TestBuildDocsMessages/C++ -=== RUN TestBuildDocsMessages/JavaScript -=== RUN TestBuildDocsMessages/TypeScript -=== RUN TestBuildDocsMessages/Rust -=== RUN TestBuildDocsMessages/Ruby -=== RUN TestBuildDocsMessages/Java -=== RUN TestBuildDocsMessages/Shell ---- PASS: TestBuildDocsMessages (0.00s) - --- PASS: TestBuildDocsMessages/Go (0.00s) - --- PASS: TestBuildDocsMessages/Python (0.00s) - --- PASS: TestBuildDocsMessages/C (0.00s) - --- PASS: TestBuildDocsMessages/C++ (0.00s) - --- PASS: TestBuildDocsMessages/JavaScript (0.00s) - --- PASS: TestBuildDocsMessages/TypeScript (0.00s) - --- PASS: TestBuildDocsMessages/Rust (0.00s) - --- PASS: TestBuildDocsMessages/Ruby (0.00s) - --- PASS: TestBuildDocsMessages/Java (0.00s) - --- PASS: TestBuildDocsMessages/Shell (0.00s) -=== RUN TestDocStyle -=== RUN TestDocStyle/go -=== RUN TestDocStyle/Go -=== RUN TestDocStyle/python -=== RUN TestDocStyle/c -=== RUN TestDocStyle/c++ -=== RUN TestDocStyle/javascript -=== RUN TestDocStyle/typescript -=== RUN TestDocStyle/rust -=== RUN TestDocStyle/ruby -=== RUN TestDocStyle/java -=== RUN TestDocStyle/shell -=== RUN TestDocStyle/bash -=== RUN TestDocStyle/unknown ---- PASS: TestDocStyle (0.00s) - --- PASS: TestDocStyle/go (0.00s) - --- PASS: TestDocStyle/Go (0.00s) - --- PASS: TestDocStyle/python (0.00s) - --- PASS: TestDocStyle/c (0.00s) - --- PASS: TestDocStyle/c++ (0.00s) - --- PASS: TestDocStyle/javascript (0.00s) - --- PASS: TestDocStyle/typescript (0.00s) - --- PASS: TestDocStyle/rust (0.00s) - --- PASS: TestDocStyle/ruby (0.00s) - --- PASS: TestDocStyle/java (0.00s) - --- PASS: TestDocStyle/shell (0.00s) - --- PASS: TestDocStyle/bash (0.00s) - --- PASS: TestDocStyle/unknown (0.00s) -=== RUN TestRemoveLastModifiedComments -=== RUN TestRemoveLastModifiedComments/removes_last_modified_comment -=== RUN TestRemoveLastModifiedComments/removes_multiple_last_modified_comments -=== RUN TestRemoveLastModifiedComments/preserves_code_without_last_modified -=== RUN TestRemoveLastModifiedComments/handles_empty_string -=== RUN TestRemoveLastModifiedComments/preserves_other_comments -=== RUN TestRemoveLastModifiedComments/handles_line_with_only_last_modified ---- PASS: TestRemoveLastModifiedComments (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_last_modified_comment (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_multiple_last_modified_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_code_without_last_modified (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_empty_string (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_other_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_line_with_only_last_modified (0.00s) -=== RUN TestEditCommand ---- PASS: TestEditCommand (0.81s) -=== RUN TestBuildHistoryMessages -=== RUN TestBuildHistoryMessages/with_recent_commits -=== RUN TestBuildHistoryMessages/empty_log ---- PASS: TestBuildHistoryMessages (0.00s) - --- PASS: TestBuildHistoryMessages/with_recent_commits (0.00s) - --- PASS: TestBuildHistoryMessages/empty_log (0.00s) -=== RUN TestBuildLintFixMessages -=== RUN TestBuildLintFixMessages/go_file_with_issues -=== RUN TestBuildLintFixMessages/python_file_with_issues ---- PASS: TestBuildLintFixMessages (0.00s) - --- PASS: TestBuildLintFixMessages/go_file_with_issues (0.00s) - --- PASS: TestBuildLintFixMessages/python_file_with_issues (0.00s) -=== RUN TestBuildPRDescribeMessages -=== RUN TestBuildPRDescribeMessages/branch_with_changes -=== RUN TestBuildPRDescribeMessages/empty_diff ---- PASS: TestBuildPRDescribeMessages (0.00s) - --- PASS: TestBuildPRDescribeMessages/branch_with_changes (0.00s) - --- PASS: TestBuildPRDescribeMessages/empty_diff (0.00s) -=== RUN TestBuildReviewMessages -=== RUN TestBuildReviewMessages/with_status_and_diff -=== RUN TestBuildReviewMessages/empty_diff ---- PASS: TestBuildReviewMessages (0.00s) - --- PASS: TestBuildReviewMessages/with_status_and_diff (0.00s) - --- PASS: TestBuildReviewMessages/empty_diff (0.00s) -=== RUN TestExecute -=== RUN TestExecute/version -grokkit version dev (commit )\n=== RUN TestExecute/help -A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow. - -Usage: - grokkit [command] - -Available Commands: - agent Multi-file agent — Grok intelligently edits multiple files with preview - changelog Generate CHANGELOG.md section from git history for Gitea releases - chat Simple interactive CLI chat with Grok (full history + streaming) - commit Generate message and commit staged changes - commit-msg Generate conventional commit message from staged changes - completion Generate shell completion script - docs Generate documentation comments for source files - edit Edit a file in-place with Grok (safe preview) - help Help about any command - history Summarize recent git history - lint Lint a file and optionally apply AI-suggested fixes - pr-describe Generate full PR description from current branch - query One-shot non-interactive query to Grok (programming focused) - query One-shot non-interactive query to Grok (programming focused) - recipe Run a recipe (transactional sous-chef mode) - review Review the current repository or directory - scaffold Scaffold a new file with Grok (safe preview + confirmation) - testgen Generate AI unit tests for files (Go/Python/C/C++, preview/apply) - version Print the version information - -Flags: - --debug Enable debug logging (logs to stderr and file) - -h, --help help for grokkit - -m, --model string Grok model to use (overrides config) - -v, --verbose Enable verbose logging - -Use "grokkit [command] --help" for more information about a command. -=== RUN TestExecute/debug_flag -{"time":"2026-03-06T21:38:16.151535509Z","level":"INFO","msg":"grokkit starting","command":"version","log_level":"debug"} -grokkit version dev (commit )\n=== RUN TestExecute/verbose_flag -grokkit version dev (commit )\n--- PASS: TestExecute (0.00s) - --- PASS: TestExecute/version (0.00s) - --- PASS: TestExecute/help (0.00s) - --- PASS: TestExecute/debug_flag (0.00s) - --- PASS: TestExecute/verbose_flag (0.00s) -=== RUN TestRunHistory -=== RUN TestRunHistory/calls_AI_with_log_output -Summarizing recent commits... -=== RUN TestRunHistory/no_commits_—_skips_AI -No commits found. -=== RUN TestRunHistory/git_error_—_skips_AI -Failed to get git log: not a git repo ---- PASS: TestRunHistory (0.00s) - --- PASS: TestRunHistory/calls_AI_with_log_output (0.00s) - --- PASS: TestRunHistory/no_commits_—_skips_AI (0.00s) - --- PASS: TestRunHistory/git_error_—_skips_AI (0.00s) -=== RUN TestRunReview -=== RUN TestRunReview/reviews_with_diff_and_status -Grok is reviewing the repo... -=== RUN TestRunReview/git_diff_error_—_skips_AI -Failed to get git diff: git error -=== RUN TestRunReview/git_status_error_—_skips_AI -Failed to get git status: git error ---- PASS: TestRunReview (0.00s) - --- PASS: TestRunReview/reviews_with_diff_and_status (0.00s) - --- PASS: TestRunReview/git_diff_error_—_skips_AI (0.00s) - --- PASS: TestRunReview/git_status_error_—_skips_AI (0.00s) -=== RUN TestRunCommit -=== RUN TestRunCommit/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommit/git_error_—_skips_AI -Failed to get staged changes: not a git repo -=== RUN TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin -Generating commit message... - -Proposed commit message: -feat(cmd): add thing -Commit with this message? (y/n): -Aborted. ---- PASS: TestRunCommit (0.00s) - --- PASS: TestRunCommit/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommit/git_error_—_skips_AI (0.00s) - --- PASS: TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin (0.00s) -=== RUN TestRunCommitMsg -=== RUN TestRunCommitMsg/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message -Generating commit message... ---- PASS: TestRunCommitMsg (0.00s) - --- PASS: TestRunCommitMsg/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message (0.00s) -=== RUN TestRunPRDescribe -=== RUN TestRunPRDescribe/no_changes_on_branch_—_skips_AI -No changes on this branch compared to master/origin/master. -=== RUN TestRunPRDescribe/first_diff_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/uses_custom_base_branch -Writing PR description... -=== RUN TestRunPRDescribe/defaults_to_master -Writing PR description... ---- PASS: TestRunPRDescribe (0.00s) - --- PASS: TestRunPRDescribe/no_changes_on_branch_—_skips_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/uses_custom_base_branch (0.00s) - --- PASS: TestRunPRDescribe/defaults_to_master (0.00s) -=== RUN TestRunLintFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestRunLintFileNotFound (0.00s) -=== RUN TestProcessDocsFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestProcessDocsFileNotFound (0.00s) -=== RUN TestProcessDocsFileUnsupportedLanguage -⚠️ Skipping /tmp/test1921082152.xyz: unsupported file type: .xyz ---- PASS: TestProcessDocsFileUnsupportedLanguage (0.00s) -=== RUN TestProcessDocsFilePreviewAndCancel -📝 Generating Go docs for: /tmp/test1474473091.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Foo does nothing. -func Foo() {} --------------------------------------------------------------------------------- - -Apply documentation to /tmp/test1474473091.go? (y/N): -❌ Cancelled. No changes made to: /tmp/test1474473091.go ---- PASS: TestProcessDocsFilePreviewAndCancel (0.00s) -=== RUN TestProcessDocsFileAutoApply -📝 Generating Go docs for: /tmp/test2612240936.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Bar does nothing. -func Bar() {} --------------------------------------------------------------------------------- - -✅ Documentation applied: /tmp/test2612240936.go ---- PASS: TestProcessDocsFileAutoApply (0.00s) -=== RUN TestRunDocs -❌ File not found: /nonexistent/file.go ---- PASS: TestRunDocs (0.00s) -=== RUN TestScaffoldCmd - scaffold_test.go:15: ✓ Fast scaffold unit test (no Grok API call) ---- PASS: TestScaffoldCmd (0.00s) -=== RUN TestScaffoldCmd_Live - scaffold_test.go:22: skipping live Grok integration test. Run with: - go test ./cmd -run TestScaffoldCmd_Live -short -v ---- SKIP: TestScaffoldCmd_Live (0.00s) -=== RUN TestTestgenCmd -=== PAUSE TestTestgenCmd -=== RUN TestTestgenCmd_Live - testgen_test.go:17: skipping live Grok integration test. Run with: - go test ./cmd -run TestTestgenCmd_Live -short -v ---- SKIP: TestTestgenCmd_Live (0.00s) -=== RUN TestRemoveSourceComments -=== PAUSE TestRemoveSourceComments -=== RUN TestGetTestPrompt -=== PAUSE TestGetTestPrompt -=== RUN TestGetTestFilePath -=== PAUSE TestGetTestFilePath -=== RUN TestGetCodeLang -=== PAUSE TestGetCodeLang -=== CONT TestBuildChangelogMessages -=== CONT TestGetCodeLang -=== RUN TestGetCodeLang/Go -=== CONT TestGetTestFilePath ---- PASS: TestBuildChangelogMessages (0.00s) -=== RUN TestGetTestFilePath/foo.go_Go -=== CONT TestBuildFullChangelog -=== RUN TestBuildFullChangelog/creates_new_file_with_header -=== PAUSE TestBuildFullChangelog/creates_new_file_with_header -=== CONT TestGetTestPrompt -=== RUN TestBuildFullChangelog/prepends_to_existing_file -=== PAUSE TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetTestPrompt/Go -=== CONT TestBuildFullChangelog/prepends_to_existing_file -=== CONT TestTestgenCmd -=== PAUSE TestGetTestPrompt/Go -=== CONT TestRemoveSourceComments -=== RUN TestRemoveSourceComments/no_comments -=== NAME TestTestgenCmd - testgen_test.go:12: ✓ Fast testgen unit test (no Grok API call) -=== PAUSE TestRemoveSourceComments/no_comments -=== PAUSE TestGetTestFilePath/foo.go_Go -=== RUN TestRemoveSourceComments/last_modified ---- PASS: TestTestgenCmd (0.00s) -=== PAUSE TestRemoveSourceComments/last_modified -=== CONT TestChangelogCmd_Flags -=== CONT TestBuildFullChangelog/creates_new_file_with_header -=== RUN TestGetTestPrompt/Python -=== PAUSE TestGetCodeLang/Go -=== RUN TestGetTestFilePath/dir/foo.py_Python -=== PAUSE TestGetTestFilePath/dir/foo.py_Python -=== RUN TestRemoveSourceComments/generated_by -=== RUN TestGetCodeLang/Python -=== PAUSE TestRemoveSourceComments/generated_by -=== RUN TestRemoveSourceComments/multiple_removable_lines ---- PASS: TestChangelogCmd_Flags (0.00s) -=== PAUSE TestRemoveSourceComments/multiple_removable_lines -=== PAUSE TestGetTestPrompt/Python -=== RUN TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/C -=== PAUSE TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetTestPrompt/C -=== RUN TestRemoveSourceComments/python_testgen -=== RUN TestGetTestPrompt/C++ -=== PAUSE TestRemoveSourceComments/python_testgen -=== PAUSE TestGetTestPrompt/C++ -=== PAUSE TestGetTestFilePath/bar.c_C -=== RUN TestGetTestPrompt/Invalid -=== RUN TestRemoveSourceComments/c_testgen -=== RUN TestGetTestFilePath/baz.cpp_C++ -=== PAUSE TestGetTestPrompt/Invalid -=== PAUSE TestRemoveSourceComments/c_testgen -=== PAUSE TestGetTestFilePath/baz.cpp_C++ -=== CONT TestGetTestPrompt/Python -=== CONT TestRemoveSourceComments/no_comments -=== CONT TestGetTestFilePath/bar.c_C -=== CONT TestGetTestPrompt/C -=== CONT TestGetTestFilePath/dir/foo.py_Python -=== CONT TestRemoveSourceComments/generated_by -=== CONT TestRemoveSourceComments/python_testgen -=== PAUSE TestGetCodeLang/Python -=== CONT TestRemoveSourceComments/partial_match_no_remove -=== RUN TestGetCodeLang/C -=== PAUSE TestGetCodeLang/C -=== RUN TestGetCodeLang/C++ -=== PAUSE TestGetCodeLang/C++ ---- PASS: TestBuildFullChangelog (0.00s) - --- PASS: TestBuildFullChangelog/prepends_to_existing_file (0.00s) - --- PASS: TestBuildFullChangelog/creates_new_file_with_header (0.00s) -=== CONT TestRemoveSourceComments/c_testgen -=== CONT TestRemoveSourceComments/multiple_removable_lines -=== CONT TestGetTestFilePath/foo.go_Go -=== CONT TestGetTestPrompt/Go -=== CONT TestGetTestPrompt/Invalid -=== CONT TestGetTestPrompt/C++ ---- PASS: TestGetTestPrompt (0.00s) - --- PASS: TestGetTestPrompt/Python (0.00s) - --- PASS: TestGetTestPrompt/C (0.00s) - --- PASS: TestGetTestPrompt/Go (0.00s) - --- PASS: TestGetTestPrompt/Invalid (0.00s) - --- PASS: TestGetTestPrompt/C++ (0.00s) -=== CONT TestGetTestFilePath/baz.cpp_C++ -=== CONT TestRemoveSourceComments/last_modified -=== CONT TestGetCodeLang/Go ---- PASS: TestGetTestFilePath (0.00s) - --- PASS: TestGetTestFilePath/bar.c_C (0.00s) - --- PASS: TestGetTestFilePath/dir/foo.py_Python (0.00s) - --- PASS: TestGetTestFilePath/foo.go_Go (0.00s) - --- PASS: TestGetTestFilePath/baz.cpp_C++ (0.00s) ---- PASS: TestRemoveSourceComments (0.00s) - --- PASS: TestRemoveSourceComments/no_comments (0.00s) - --- PASS: TestRemoveSourceComments/generated_by (0.00s) - --- PASS: TestRemoveSourceComments/python_testgen (0.00s) - --- PASS: TestRemoveSourceComments/partial_match_no_remove (0.00s) - --- PASS: TestRemoveSourceComments/c_testgen (0.00s) - --- PASS: TestRemoveSourceComments/multiple_removable_lines (0.00s) - --- PASS: TestRemoveSourceComments/last_modified (0.00s) -=== CONT TestGetCodeLang/C++ -=== CONT TestGetCodeLang/Python -=== CONT TestGetCodeLang/C ---- PASS: TestGetCodeLang (0.00s) - --- PASS: TestGetCodeLang/Go (0.00s) - --- PASS: TestGetCodeLang/C++ (0.00s) - --- PASS: TestGetCodeLang/C (0.00s) - --- PASS: TestGetCodeLang/Python (0.00s) -PASS -ok gmgauthier.com/grokkit/cmd 1.839s -=== RUN TestGetModel -=== RUN TestGetModel/returns_flag_model_when_provided -=== RUN TestGetModel/returns_default_when_flag_empty ---- PASS: TestGetModel (0.00s) - --- PASS: TestGetModel/returns_flag_model_when_provided (0.00s) - --- PASS: TestGetModel/returns_default_when_flag_empty (0.00s) -=== RUN TestGetModelWithAlias ---- PASS: TestGetModelWithAlias (0.00s) -=== RUN TestGetCommandModel -=== RUN TestGetCommandModel/lint_ -=== RUN TestGetCommandModel/lint_override -=== RUN TestGetCommandModel/other_ -=== RUN TestGetCommandModel/unknown_ ---- PASS: TestGetCommandModel (0.00s) - --- PASS: TestGetCommandModel/lint_ (0.00s) - --- PASS: TestGetCommandModel/lint_override (0.00s) - --- PASS: TestGetCommandModel/other_ (0.00s) - --- PASS: TestGetCommandModel/unknown_ (0.00s) -=== RUN TestLoad ---- PASS: TestLoad (0.00s) -=== RUN TestGetTemperature ---- PASS: TestGetTemperature (0.00s) -=== RUN TestGetTimeout ---- PASS: TestGetTimeout (0.00s) -=== RUN TestGetLogLevel ---- PASS: TestGetLogLevel (0.00s) -PASS -ok gmgauthier.com/grokkit/config (cached) -=== RUN TestGitError ---- PASS: TestGitError (0.00s) -=== RUN TestAPIError -=== RUN TestAPIError/with_status_code -=== RUN TestAPIError/without_status_code ---- PASS: TestAPIError (0.00s) - --- PASS: TestAPIError/with_status_code (0.00s) - --- PASS: TestAPIError/without_status_code (0.00s) -=== RUN TestFileError ---- PASS: TestFileError (0.00s) -=== RUN TestAPIErrorUnwrap ---- PASS: TestAPIErrorUnwrap (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/errors (cached) -=== RUN TestIsRepo ---- PASS: TestIsRepo (0.00s) -=== RUN TestRun -=== RUN TestRun/version_command_succeeds -=== RUN TestRun/invalid_command_fails ---- PASS: TestRun (0.01s) - --- PASS: TestRun/version_command_succeeds (0.00s) - --- PASS: TestRun/invalid_command_fails (0.01s) -=== RUN TestGitRunner ---- PASS: TestGitRunner (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/git (cached) -=== RUN TestCleanCodeResponse_Comprehensive -=== RUN TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/handles_no_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse_Comprehensive/trims_leading_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/handles_multiple_languages -=== RUN TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces -=== RUN TestCleanCodeResponse_Comprehensive/removes_only_fence_lines -=== RUN TestCleanCodeResponse_Comprehensive/handles_empty_input -=== RUN TestCleanCodeResponse_Comprehensive/handles_only_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_code_indentation ---- PASS: TestCleanCodeResponse_Comprehensive (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_leading_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_multiple_languages (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_only_fence_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_empty_input (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_only_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_code_indentation (0.00s) -=== RUN TestCleanCodeResponse -=== RUN TestCleanCodeResponse/removes_markdown_fences -=== RUN TestCleanCodeResponse/removes_language_tag -=== RUN TestCleanCodeResponse/handles_no_fences -=== RUN TestCleanCodeResponse/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse/trims_whitespace ---- PASS: TestCleanCodeResponse (0.00s) - --- PASS: TestCleanCodeResponse/removes_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse/removes_language_tag (0.00s) - --- PASS: TestCleanCodeResponse/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse/trims_whitespace (0.00s) -=== RUN TestStreamSilent ---- PASS: TestStreamSilent (0.00s) -=== RUN TestStream -foobar ---- PASS: TestStream (0.00s) -=== RUN TestStreamWithTemp -response ---- PASS: TestStreamWithTemp (0.00s) -=== RUN TestStreamDoneSignal ---- PASS: TestStreamDoneSignal (0.00s) -=== RUN TestStreamEmptyResponse ---- PASS: TestStreamEmptyResponse (0.00s) -=== RUN TestNewClient ---- PASS: TestNewClient (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/grok (cached) -=== RUN TestDetectLanguage -=== RUN TestDetectLanguage/Go_file -=== RUN TestDetectLanguage/Python_file -=== RUN TestDetectLanguage/JavaScript_file -=== RUN TestDetectLanguage/JSX_file -=== RUN TestDetectLanguage/TypeScript_file -=== RUN TestDetectLanguage/TSX_file -=== RUN TestDetectLanguage/Rust_file -=== RUN TestDetectLanguage/Ruby_file -=== RUN TestDetectLanguage/Java_file -=== RUN TestDetectLanguage/C_file -=== RUN TestDetectLanguage/C++_file -=== RUN TestDetectLanguage/Header_file -=== RUN TestDetectLanguage/Shell_script -=== RUN TestDetectLanguage/Bash_script -=== RUN TestDetectLanguage/Unsupported_file -=== RUN TestDetectLanguage/No_extension -=== RUN TestDetectLanguage/Case_insensitive ---- PASS: TestDetectLanguage (0.00s) - --- PASS: TestDetectLanguage/Go_file (0.00s) - --- PASS: TestDetectLanguage/Python_file (0.00s) - --- PASS: TestDetectLanguage/JavaScript_file (0.00s) - --- PASS: TestDetectLanguage/JSX_file (0.00s) - --- PASS: TestDetectLanguage/TypeScript_file (0.00s) - --- PASS: TestDetectLanguage/TSX_file (0.00s) - --- PASS: TestDetectLanguage/Rust_file (0.00s) - --- PASS: TestDetectLanguage/Ruby_file (0.00s) - --- PASS: TestDetectLanguage/Java_file (0.00s) - --- PASS: TestDetectLanguage/C_file (0.00s) - --- PASS: TestDetectLanguage/C++_file (0.00s) - --- PASS: TestDetectLanguage/Header_file (0.00s) - --- PASS: TestDetectLanguage/Shell_script (0.00s) - --- PASS: TestDetectLanguage/Bash_script (0.00s) - --- PASS: TestDetectLanguage/Unsupported_file (0.00s) - --- PASS: TestDetectLanguage/No_extension (0.00s) - --- PASS: TestDetectLanguage/Case_insensitive (0.00s) -=== RUN TestCheckLinterAvailable -=== RUN TestCheckLinterAvailable/go_command_should_be_available - linter_test.go:84: go should be available on system with Go installed: available=true -=== RUN TestCheckLinterAvailable/nonexistent_command - linter_test.go:84: nonexistent command should not be available: available=false ---- PASS: TestCheckLinterAvailable (0.00s) - --- PASS: TestCheckLinterAvailable/go_command_should_be_available (0.00s) - --- PASS: TestCheckLinterAvailable/nonexistent_command (0.00s) -=== RUN TestFindAvailableLinter -=== RUN TestFindAvailableLinter/Go_language_should_find_a_linter -=== RUN TestFindAvailableLinter/Language_with_no_available_linters ---- PASS: TestFindAvailableLinter (0.00s) - --- PASS: TestFindAvailableLinter/Go_language_should_find_a_linter (0.00s) - --- PASS: TestFindAvailableLinter/Language_with_no_available_linters (0.00s) -=== RUN TestRunLinter -=== RUN TestRunLinter/Run_go_vet_on_valid_file - linter_test.go:179: go vet result: ExitCode=0, HasIssues=false, Output="" -=== RUN TestRunLinter/Run_nonexistent_linter ---- PASS: TestRunLinter (0.07s) - --- PASS: TestRunLinter/Run_go_vet_on_valid_file (0.07s) - --- PASS: TestRunLinter/Run_nonexistent_linter (0.00s) -=== RUN TestLintFile -=== RUN TestLintFile/Lint_valid_Go_file -=== RUN TestLintFile/Lint_nonexistent_file -=== RUN TestLintFile/Lint_unsupported_file_type ---- PASS: TestLintFile (0.16s) - --- PASS: TestLintFile/Lint_valid_Go_file (0.16s) - --- PASS: TestLintFile/Lint_nonexistent_file (0.00s) - --- PASS: TestLintFile/Lint_unsupported_file_type (0.00s) -=== RUN TestGetSupportedLanguages ---- PASS: TestGetSupportedLanguages (0.00s) -=== RUN TestLanguageStructure ---- PASS: TestLanguageStructure (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/linter (cached) -=== RUN TestInit -=== RUN TestInit/default_level -=== RUN TestInit/debug_level -=== RUN TestInit/warn_level -=== RUN TestInit/error_level -=== RUN TestInit/invalid_level_defaults_to_info ---- PASS: TestInit (0.00s) - --- PASS: TestInit/default_level (0.00s) - --- PASS: TestInit/debug_level (0.00s) - --- PASS: TestInit/warn_level (0.00s) - --- PASS: TestInit/error_level (0.00s) - --- PASS: TestInit/invalid_level_defaults_to_info (0.00s) -=== RUN TestLogging -{"time":"2026-03-04T19:52:04.116795514Z","level":"DEBUG","msg":"test debug message","key":"value"} -{"time":"2026-03-04T19:52:04.116935804Z","level":"INFO","msg":"test info message","count":42} -{"time":"2026-03-04T19:52:04.116957313Z","level":"WARN","msg":"test warn message","enabled":true} -{"time":"2026-03-04T19:52:04.116977684Z","level":"ERROR","msg":"test error message","error":"something went wrong"} ---- PASS: TestLogging (0.00s) -=== RUN TestSetLevel ---- PASS: TestSetLevel (0.00s) -=== RUN TestWith ---- PASS: TestWith (0.00s) -=== RUN TestWithContext -=== RUN TestWithContext/without_init -=== RUN TestWithContext/with_init ---- PASS: TestWithContext (0.00s) - --- PASS: TestWithContext/without_init (0.00s) - --- PASS: TestWithContext/with_init (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/logger (cached) -=== RUN TestExtractCodeBlocks -=== PAUSE TestExtractCodeBlocks -=== CONT TestExtractCodeBlocks -=== RUN TestExtractCodeBlocks/Single_block -=== RUN TestExtractCodeBlocks/Multiple_blocks -=== RUN TestExtractCodeBlocks/No_blocks -=== RUN TestExtractCodeBlocks/Incomplete_block ---- PASS: TestExtractCodeBlocks (0.00s) - --- PASS: TestExtractCodeBlocks/Single_block (0.00s) - --- PASS: TestExtractCodeBlocks/Multiple_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/No_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/Incomplete_block (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/recipe (cached) -=== RUN TestVersionInfo -=== PAUSE TestVersionInfo -=== CONT TestVersionInfo -=== RUN TestVersionInfo/Version -=== PAUSE TestVersionInfo/Version -=== RUN TestVersionInfo/Commit -=== PAUSE TestVersionInfo/Commit -=== RUN TestVersionInfo/BuildDate -=== PAUSE TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Version -=== CONT TestVersionInfo/Commit -=== CONT TestVersionInfo/BuildDate ---- PASS: TestVersionInfo (0.00s) - --- PASS: TestVersionInfo/Version (0.00s) - --- PASS: TestVersionInfo/Commit (0.00s) - --- PASS: TestVersionInfo/BuildDate (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/version (cached) diff --git a/test_output_race_no_cache.txt b/test_output_race_no_cache.txt deleted file mode 100644 index d2430a1..0000000 --- a/test_output_race_no_cache.txt +++ /dev/null @@ -1,644 +0,0 @@ -? gmgauthier.com/grokkit [no test files] -=== RUN TestAgentCommand_PlanGeneration - agent_test.go:8: Agent plan generation test placeholder — ready for expansion ---- PASS: TestAgentCommand_PlanGeneration (0.00s) -=== RUN TestAgentCommand_CleanCodeResponseIntegration ---- PASS: TestAgentCommand_CleanCodeResponseIntegration (0.00s) -=== RUN TestBuildChangelogMessages -=== PAUSE TestBuildChangelogMessages -=== RUN TestBuildFullChangelog -=== PAUSE TestBuildFullChangelog -=== RUN TestChangelogCmd_Flags -=== PAUSE TestChangelogCmd_Flags -=== RUN TestGetChatHistoryFile ---- PASS: TestGetChatHistoryFile (0.00s) -=== RUN TestLoadChatHistory_NoFile ---- PASS: TestLoadChatHistory_NoFile (0.00s) -=== RUN TestSaveAndLoadChatHistory ---- PASS: TestSaveAndLoadChatHistory (0.00s) -=== RUN TestLoadChatHistory_InvalidJSON ---- PASS: TestLoadChatHistory_InvalidJSON (0.00s) -=== RUN TestBuildCommitMessages -=== RUN TestBuildCommitMessages/normal_diff -=== RUN TestBuildCommitMessages/empty_diff ---- PASS: TestBuildCommitMessages (0.00s) - --- PASS: TestBuildCommitMessages/normal_diff (0.00s) - --- PASS: TestBuildCommitMessages/empty_diff (0.00s) -=== RUN TestCompletionCmd -=== RUN TestCompletionCmd/bash -=== RUN TestCompletionCmd/zsh -=== RUN TestCompletionCmd/fish -=== RUN TestCompletionCmd/powershell ---- PASS: TestCompletionCmd (0.00s) - --- PASS: TestCompletionCmd/bash (0.00s) - --- PASS: TestCompletionCmd/zsh (0.00s) - --- PASS: TestCompletionCmd/fish (0.00s) - --- PASS: TestCompletionCmd/powershell (0.00s) -=== RUN TestBuildDocsMessages -=== RUN TestBuildDocsMessages/Go -=== RUN TestBuildDocsMessages/Python -=== RUN TestBuildDocsMessages/C -=== RUN TestBuildDocsMessages/C++ -=== RUN TestBuildDocsMessages/JavaScript -=== RUN TestBuildDocsMessages/TypeScript -=== RUN TestBuildDocsMessages/Rust -=== RUN TestBuildDocsMessages/Ruby -=== RUN TestBuildDocsMessages/Java -=== RUN TestBuildDocsMessages/Shell ---- PASS: TestBuildDocsMessages (0.00s) - --- PASS: TestBuildDocsMessages/Go (0.00s) - --- PASS: TestBuildDocsMessages/Python (0.00s) - --- PASS: TestBuildDocsMessages/C (0.00s) - --- PASS: TestBuildDocsMessages/C++ (0.00s) - --- PASS: TestBuildDocsMessages/JavaScript (0.00s) - --- PASS: TestBuildDocsMessages/TypeScript (0.00s) - --- PASS: TestBuildDocsMessages/Rust (0.00s) - --- PASS: TestBuildDocsMessages/Ruby (0.00s) - --- PASS: TestBuildDocsMessages/Java (0.00s) - --- PASS: TestBuildDocsMessages/Shell (0.00s) -=== RUN TestDocStyle -=== RUN TestDocStyle/go -=== RUN TestDocStyle/Go -=== RUN TestDocStyle/python -=== RUN TestDocStyle/c -=== RUN TestDocStyle/c++ -=== RUN TestDocStyle/javascript -=== RUN TestDocStyle/typescript -=== RUN TestDocStyle/rust -=== RUN TestDocStyle/ruby -=== RUN TestDocStyle/java -=== RUN TestDocStyle/shell -=== RUN TestDocStyle/bash -=== RUN TestDocStyle/unknown ---- PASS: TestDocStyle (0.00s) - --- PASS: TestDocStyle/go (0.00s) - --- PASS: TestDocStyle/Go (0.00s) - --- PASS: TestDocStyle/python (0.00s) - --- PASS: TestDocStyle/c (0.00s) - --- PASS: TestDocStyle/c++ (0.00s) - --- PASS: TestDocStyle/javascript (0.00s) - --- PASS: TestDocStyle/typescript (0.00s) - --- PASS: TestDocStyle/rust (0.00s) - --- PASS: TestDocStyle/ruby (0.00s) - --- PASS: TestDocStyle/java (0.00s) - --- PASS: TestDocStyle/shell (0.00s) - --- PASS: TestDocStyle/bash (0.00s) - --- PASS: TestDocStyle/unknown (0.00s) -=== RUN TestRemoveLastModifiedComments -=== RUN TestRemoveLastModifiedComments/removes_last_modified_comment -=== RUN TestRemoveLastModifiedComments/removes_multiple_last_modified_comments -=== RUN TestRemoveLastModifiedComments/preserves_code_without_last_modified -=== RUN TestRemoveLastModifiedComments/handles_empty_string -=== RUN TestRemoveLastModifiedComments/preserves_other_comments -=== RUN TestRemoveLastModifiedComments/handles_line_with_only_last_modified ---- PASS: TestRemoveLastModifiedComments (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_last_modified_comment (0.00s) - --- PASS: TestRemoveLastModifiedComments/removes_multiple_last_modified_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_code_without_last_modified (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_empty_string (0.00s) - --- PASS: TestRemoveLastModifiedComments/preserves_other_comments (0.00s) - --- PASS: TestRemoveLastModifiedComments/handles_line_with_only_last_modified (0.00s) -=== RUN TestEditCommand ---- PASS: TestEditCommand (0.80s) -=== RUN TestBuildHistoryMessages -=== RUN TestBuildHistoryMessages/with_recent_commits -=== RUN TestBuildHistoryMessages/empty_log ---- PASS: TestBuildHistoryMessages (0.00s) - --- PASS: TestBuildHistoryMessages/with_recent_commits (0.00s) - --- PASS: TestBuildHistoryMessages/empty_log (0.00s) -=== RUN TestBuildLintFixMessages -=== RUN TestBuildLintFixMessages/go_file_with_issues -=== RUN TestBuildLintFixMessages/python_file_with_issues ---- PASS: TestBuildLintFixMessages (0.00s) - --- PASS: TestBuildLintFixMessages/go_file_with_issues (0.00s) - --- PASS: TestBuildLintFixMessages/python_file_with_issues (0.00s) -=== RUN TestBuildPRDescribeMessages -=== RUN TestBuildPRDescribeMessages/branch_with_changes -=== RUN TestBuildPRDescribeMessages/empty_diff ---- PASS: TestBuildPRDescribeMessages (0.00s) - --- PASS: TestBuildPRDescribeMessages/branch_with_changes (0.00s) - --- PASS: TestBuildPRDescribeMessages/empty_diff (0.00s) -=== RUN TestBuildReviewMessages -=== RUN TestBuildReviewMessages/with_status_and_diff -=== RUN TestBuildReviewMessages/empty_diff ---- PASS: TestBuildReviewMessages (0.00s) - --- PASS: TestBuildReviewMessages/with_status_and_diff (0.00s) - --- PASS: TestBuildReviewMessages/empty_diff (0.00s) -=== RUN TestExecute -=== RUN TestExecute/version -grokkit version dev (commit )\n=== RUN TestExecute/help -A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow. - -Usage: - grokkit [command] - -Available Commands: - agent Multi-file agent — Grok intelligently edits multiple files with preview - changelog Generate CHANGELOG.md section from git history for Gitea releases - chat Simple interactive CLI chat with Grok (full history + streaming) - commit Generate message and commit staged changes - commit-msg Generate conventional commit message from staged changes - completion Generate shell completion script - docs Generate documentation comments for source files - edit Edit a file in-place with Grok (safe preview) - help Help about any command - history Summarize recent git history - lint Lint a file and optionally apply AI-suggested fixes - pr-describe Generate full PR description from current branch - query One-shot non-interactive query to Grok (programming focused) - query One-shot non-interactive query to Grok (programming focused) - recipe Run a recipe (transactional sous-chef mode) - review Review the current repository or directory - scaffold Scaffold a new file with Grok (safe preview + confirmation) - testgen Generate AI unit tests for files (Go/Python/C/C++, preview/apply) - version Print the version information - -Flags: - --debug Enable debug logging (logs to stderr and file) - -h, --help help for grokkit - -m, --model string Grok model to use (overrides config) - -v, --verbose Enable verbose logging - -Use "grokkit [command] --help" for more information about a command. -=== RUN TestExecute/debug_flag -{"time":"2026-03-06T21:38:27.053675791Z","level":"INFO","msg":"grokkit starting","command":"version","log_level":"debug"} -grokkit version dev (commit )\n=== RUN TestExecute/verbose_flag -grokkit version dev (commit )\n--- PASS: TestExecute (0.00s) - --- PASS: TestExecute/version (0.00s) - --- PASS: TestExecute/help (0.00s) - --- PASS: TestExecute/debug_flag (0.00s) - --- PASS: TestExecute/verbose_flag (0.00s) -=== RUN TestRunHistory -=== RUN TestRunHistory/calls_AI_with_log_output -Summarizing recent commits... -=== RUN TestRunHistory/no_commits_—_skips_AI -No commits found. -=== RUN TestRunHistory/git_error_—_skips_AI -Failed to get git log: not a git repo ---- PASS: TestRunHistory (0.00s) - --- PASS: TestRunHistory/calls_AI_with_log_output (0.00s) - --- PASS: TestRunHistory/no_commits_—_skips_AI (0.00s) - --- PASS: TestRunHistory/git_error_—_skips_AI (0.00s) -=== RUN TestRunReview -=== RUN TestRunReview/reviews_with_diff_and_status -Grok is reviewing the repo... -=== RUN TestRunReview/git_diff_error_—_skips_AI -Failed to get git diff: git error -=== RUN TestRunReview/git_status_error_—_skips_AI -Failed to get git status: git error ---- PASS: TestRunReview (0.00s) - --- PASS: TestRunReview/reviews_with_diff_and_status (0.00s) - --- PASS: TestRunReview/git_diff_error_—_skips_AI (0.00s) - --- PASS: TestRunReview/git_status_error_—_skips_AI (0.00s) -=== RUN TestRunCommit -=== RUN TestRunCommit/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommit/git_error_—_skips_AI -Failed to get staged changes: not a git repo -=== RUN TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin -Generating commit message... - -Proposed commit message: -feat(cmd): add thing -Commit with this message? (y/n): -Aborted. ---- PASS: TestRunCommit (0.00s) - --- PASS: TestRunCommit/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommit/git_error_—_skips_AI (0.00s) - --- PASS: TestRunCommit/with_staged_changes_—_calls_AI_then_cancels_via_stdin (0.00s) -=== RUN TestRunCommitMsg -=== RUN TestRunCommitMsg/no_staged_changes_—_skips_AI -No staged changes! -=== RUN TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message -Generating commit message... ---- PASS: TestRunCommitMsg (0.00s) - --- PASS: TestRunCommitMsg/no_staged_changes_—_skips_AI (0.00s) - --- PASS: TestRunCommitMsg/with_staged_changes_—_calls_AI_and_prints_message (0.00s) -=== RUN TestRunPRDescribe -=== RUN TestRunPRDescribe/no_changes_on_branch_—_skips_AI -No changes on this branch compared to master/origin/master. -=== RUN TestRunPRDescribe/first_diff_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI -Writing PR description... -=== RUN TestRunPRDescribe/uses_custom_base_branch -Writing PR description... -=== RUN TestRunPRDescribe/defaults_to_master -Writing PR description... ---- PASS: TestRunPRDescribe (0.00s) - --- PASS: TestRunPRDescribe/no_changes_on_branch_—_skips_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/first_diff_empty,_second_succeeds_—_calls_AI (0.00s) - --- PASS: TestRunPRDescribe/uses_custom_base_branch (0.00s) - --- PASS: TestRunPRDescribe/defaults_to_master (0.00s) -=== RUN TestRunLintFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestRunLintFileNotFound (0.00s) -=== RUN TestProcessDocsFileNotFound -❌ File not found: /nonexistent/path/file.go ---- PASS: TestProcessDocsFileNotFound (0.00s) -=== RUN TestProcessDocsFileUnsupportedLanguage -⚠️ Skipping /tmp/test3313905325.xyz: unsupported file type: .xyz ---- PASS: TestProcessDocsFileUnsupportedLanguage (0.00s) -=== RUN TestProcessDocsFilePreviewAndCancel -📝 Generating Go docs for: /tmp/test3983744019.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Foo does nothing. -func Foo() {} --------------------------------------------------------------------------------- - -Apply documentation to /tmp/test3983744019.go? (y/N): -❌ Cancelled. No changes made to: /tmp/test3983744019.go ---- PASS: TestProcessDocsFilePreviewAndCancel (0.00s) -=== RUN TestProcessDocsFileAutoApply -📝 Generating Go docs for: /tmp/test1798745211.go - -📋 Preview of documented code: --------------------------------------------------------------------------------- -package main - -// Bar does nothing. -func Bar() {} --------------------------------------------------------------------------------- - -✅ Documentation applied: /tmp/test1798745211.go ---- PASS: TestProcessDocsFileAutoApply (0.00s) -=== RUN TestRunDocs -❌ File not found: /nonexistent/file.go ---- PASS: TestRunDocs (0.00s) -=== RUN TestScaffoldCmd - scaffold_test.go:15: ✓ Fast scaffold unit test (no Grok API call) ---- PASS: TestScaffoldCmd (0.00s) -=== RUN TestScaffoldCmd_Live - scaffold_test.go:22: skipping live Grok integration test. Run with: - go test ./cmd -run TestScaffoldCmd_Live -short -v ---- SKIP: TestScaffoldCmd_Live (0.00s) -=== RUN TestTestgenCmd -=== PAUSE TestTestgenCmd -=== RUN TestTestgenCmd_Live - testgen_test.go:17: skipping live Grok integration test. Run with: - go test ./cmd -run TestTestgenCmd_Live -short -v ---- SKIP: TestTestgenCmd_Live (0.00s) -=== RUN TestRemoveSourceComments -=== PAUSE TestRemoveSourceComments -=== RUN TestGetTestPrompt -=== PAUSE TestGetTestPrompt -=== RUN TestGetTestFilePath -=== PAUSE TestGetTestFilePath -=== RUN TestGetCodeLang -=== PAUSE TestGetCodeLang -=== CONT TestBuildChangelogMessages -=== CONT TestTestgenCmd -=== CONT TestChangelogCmd_Flags -=== CONT TestBuildFullChangelog -=== RUN TestBuildFullChangelog/creates_new_file_with_header ---- PASS: TestBuildChangelogMessages (0.00s) -=== PAUSE TestBuildFullChangelog/creates_new_file_with_header ---- PASS: TestChangelogCmd_Flags (0.00s) -=== CONT TestGetTestFilePath -=== RUN TestGetTestFilePath/foo.go_Go -=== PAUSE TestGetTestFilePath/foo.go_Go -=== RUN TestBuildFullChangelog/prepends_to_existing_file -=== RUN TestGetTestFilePath/dir/foo.py_Python -=== CONT TestRemoveSourceComments -=== RUN TestRemoveSourceComments/no_comments -=== PAUSE TestRemoveSourceComments/no_comments -=== RUN TestRemoveSourceComments/last_modified -=== PAUSE TestGetTestFilePath/dir/foo.py_Python -=== PAUSE TestBuildFullChangelog/prepends_to_existing_file -=== PAUSE TestRemoveSourceComments/last_modified -=== RUN TestGetTestFilePath/bar.c_C -=== RUN TestRemoveSourceComments/generated_by -=== CONT TestBuildFullChangelog/creates_new_file_with_header -=== CONT TestGetCodeLang -=== PAUSE TestRemoveSourceComments/generated_by -=== RUN TestGetCodeLang/Go -=== RUN TestRemoveSourceComments/multiple_removable_lines -=== CONT TestBuildFullChangelog/prepends_to_existing_file -=== NAME TestTestgenCmd - testgen_test.go:12: ✓ Fast testgen unit test (no Grok API call) ---- PASS: TestTestgenCmd (0.00s) -=== CONT TestGetTestPrompt -=== RUN TestGetTestPrompt/Go -=== PAUSE TestGetTestPrompt/Go -=== PAUSE TestGetTestFilePath/bar.c_C -=== PAUSE TestRemoveSourceComments/multiple_removable_lines -=== RUN TestGetTestPrompt/Python -=== RUN TestGetTestFilePath/baz.cpp_C++ -=== RUN TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetTestFilePath/baz.cpp_C++ -=== PAUSE TestGetTestPrompt/Python -=== PAUSE TestRemoveSourceComments/partial_match_no_remove -=== PAUSE TestGetCodeLang/Go -=== CONT TestGetTestFilePath/bar.c_C -=== RUN TestRemoveSourceComments/python_testgen -=== RUN TestGetCodeLang/Python -=== PAUSE TestRemoveSourceComments/python_testgen -=== PAUSE TestGetCodeLang/Python -=== RUN TestRemoveSourceComments/c_testgen -=== RUN TestGetCodeLang/C -=== PAUSE TestRemoveSourceComments/c_testgen -=== CONT TestGetTestFilePath/foo.go_Go -=== PAUSE TestGetCodeLang/C -=== CONT TestRemoveSourceComments/no_comments -=== RUN TestGetCodeLang/C++ -=== CONT TestGetTestFilePath/baz.cpp_C++ -=== CONT TestRemoveSourceComments/partial_match_no_remove -=== CONT TestRemoveSourceComments/generated_by -=== CONT TestRemoveSourceComments/multiple_removable_lines -=== CONT TestRemoveSourceComments/python_testgen -=== CONT TestGetTestFilePath/dir/foo.py_Python -=== CONT TestRemoveSourceComments/last_modified -=== RUN TestGetTestPrompt/C -=== PAUSE TestGetTestPrompt/C -=== CONT TestRemoveSourceComments/c_testgen -=== RUN TestGetTestPrompt/C++ ---- PASS: TestGetTestFilePath (0.00s) - --- PASS: TestGetTestFilePath/bar.c_C (0.00s) - --- PASS: TestGetTestFilePath/foo.go_Go (0.00s) - --- PASS: TestGetTestFilePath/baz.cpp_C++ (0.00s) - --- PASS: TestGetTestFilePath/dir/foo.py_Python (0.00s) -=== PAUSE TestGetTestPrompt/C++ -=== RUN TestGetTestPrompt/Invalid -=== PAUSE TestGetCodeLang/C++ -=== PAUSE TestGetTestPrompt/Invalid ---- PASS: TestRemoveSourceComments (0.00s) - --- PASS: TestRemoveSourceComments/no_comments (0.00s) - --- PASS: TestRemoveSourceComments/generated_by (0.00s) - --- PASS: TestRemoveSourceComments/multiple_removable_lines (0.00s) - --- PASS: TestRemoveSourceComments/partial_match_no_remove (0.00s) - --- PASS: TestRemoveSourceComments/python_testgen (0.00s) - --- PASS: TestRemoveSourceComments/last_modified (0.00s) - --- PASS: TestRemoveSourceComments/c_testgen (0.00s) -=== CONT TestGetTestPrompt/C -=== CONT TestGetCodeLang/Go -=== CONT TestGetCodeLang/Python -=== CONT TestGetTestPrompt/Go ---- PASS: TestBuildFullChangelog (0.00s) - --- PASS: TestBuildFullChangelog/creates_new_file_with_header (0.00s) - --- PASS: TestBuildFullChangelog/prepends_to_existing_file (0.00s) -=== CONT TestGetTestPrompt/Invalid -=== CONT TestGetCodeLang/C -=== CONT TestGetTestPrompt/C++ -=== CONT TestGetTestPrompt/Python -=== CONT TestGetCodeLang/C++ ---- PASS: TestGetTestPrompt (0.00s) - --- PASS: TestGetTestPrompt/C (0.00s) - --- PASS: TestGetTestPrompt/Go (0.00s) - --- PASS: TestGetTestPrompt/Invalid (0.00s) - --- PASS: TestGetTestPrompt/C++ (0.00s) - --- PASS: TestGetTestPrompt/Python (0.00s) ---- PASS: TestGetCodeLang (0.00s) - --- PASS: TestGetCodeLang/Python (0.00s) - --- PASS: TestGetCodeLang/Go (0.00s) - --- PASS: TestGetCodeLang/C (0.00s) - --- PASS: TestGetCodeLang/C++ (0.00s) -PASS -ok gmgauthier.com/grokkit/cmd 1.837s -=== RUN TestGetModel -=== RUN TestGetModel/returns_flag_model_when_provided -=== RUN TestGetModel/returns_default_when_flag_empty ---- PASS: TestGetModel (0.00s) - --- PASS: TestGetModel/returns_flag_model_when_provided (0.00s) - --- PASS: TestGetModel/returns_default_when_flag_empty (0.00s) -=== RUN TestGetModelWithAlias ---- PASS: TestGetModelWithAlias (0.00s) -=== RUN TestGetCommandModel -=== RUN TestGetCommandModel/lint_ -=== RUN TestGetCommandModel/lint_override -=== RUN TestGetCommandModel/other_ -=== RUN TestGetCommandModel/unknown_ ---- PASS: TestGetCommandModel (0.00s) - --- PASS: TestGetCommandModel/lint_ (0.00s) - --- PASS: TestGetCommandModel/lint_override (0.00s) - --- PASS: TestGetCommandModel/other_ (0.00s) - --- PASS: TestGetCommandModel/unknown_ (0.00s) -=== RUN TestLoad ---- PASS: TestLoad (0.00s) -=== RUN TestGetTemperature ---- PASS: TestGetTemperature (0.00s) -=== RUN TestGetTimeout ---- PASS: TestGetTimeout (0.00s) -=== RUN TestGetLogLevel ---- PASS: TestGetLogLevel (0.00s) -PASS -ok gmgauthier.com/grokkit/config 1.011s -=== RUN TestGitError ---- PASS: TestGitError (0.00s) -=== RUN TestAPIError -=== RUN TestAPIError/with_status_code -=== RUN TestAPIError/without_status_code ---- PASS: TestAPIError (0.00s) - --- PASS: TestAPIError/with_status_code (0.00s) - --- PASS: TestAPIError/without_status_code (0.00s) -=== RUN TestFileError ---- PASS: TestFileError (0.00s) -=== RUN TestAPIErrorUnwrap ---- PASS: TestAPIErrorUnwrap (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/errors 1.008s -=== RUN TestIsRepo ---- PASS: TestIsRepo (0.00s) -=== RUN TestRun -=== RUN TestRun/version_command_succeeds -=== RUN TestRun/invalid_command_fails ---- PASS: TestRun (0.01s) - --- PASS: TestRun/version_command_succeeds (0.00s) - --- PASS: TestRun/invalid_command_fails (0.01s) -=== RUN TestGitRunner ---- PASS: TestGitRunner (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/git 1.023s -=== RUN TestCleanCodeResponse_Comprehensive -=== RUN TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences -=== RUN TestCleanCodeResponse_Comprehensive/handles_no_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse_Comprehensive/trims_leading_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace -=== RUN TestCleanCodeResponse_Comprehensive/handles_multiple_languages -=== RUN TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces -=== RUN TestCleanCodeResponse_Comprehensive/removes_only_fence_lines -=== RUN TestCleanCodeResponse_Comprehensive/handles_empty_input -=== RUN TestCleanCodeResponse_Comprehensive/handles_only_fences -=== RUN TestCleanCodeResponse_Comprehensive/preserves_code_indentation ---- PASS: TestCleanCodeResponse_Comprehensive (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_go_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_python_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_plain_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_leading_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/trims_trailing_whitespace (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_multiple_languages (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_fences_with_extra_spaces (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/removes_only_fence_lines (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_empty_input (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/handles_only_fences (0.00s) - --- PASS: TestCleanCodeResponse_Comprehensive/preserves_code_indentation (0.00s) -=== RUN TestCleanCodeResponse -=== RUN TestCleanCodeResponse/removes_markdown_fences -=== RUN TestCleanCodeResponse/removes_language_tag -=== RUN TestCleanCodeResponse/handles_no_fences -=== RUN TestCleanCodeResponse/preserves_internal_blank_lines -=== RUN TestCleanCodeResponse/trims_whitespace ---- PASS: TestCleanCodeResponse (0.00s) - --- PASS: TestCleanCodeResponse/removes_markdown_fences (0.00s) - --- PASS: TestCleanCodeResponse/removes_language_tag (0.00s) - --- PASS: TestCleanCodeResponse/handles_no_fences (0.00s) - --- PASS: TestCleanCodeResponse/preserves_internal_blank_lines (0.00s) - --- PASS: TestCleanCodeResponse/trims_whitespace (0.00s) -=== RUN TestStreamSilent ---- PASS: TestStreamSilent (0.00s) -=== RUN TestStream -foobar ---- PASS: TestStream (0.00s) -=== RUN TestStreamWithTemp -response ---- PASS: TestStreamWithTemp (0.00s) -=== RUN TestStreamDoneSignal ---- PASS: TestStreamDoneSignal (0.00s) -=== RUN TestStreamEmptyResponse ---- PASS: TestStreamEmptyResponse (0.00s) -=== RUN TestNewClient ---- PASS: TestNewClient (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/grok 1.017s -=== RUN TestDetectLanguage -=== RUN TestDetectLanguage/Go_file -=== RUN TestDetectLanguage/Python_file -=== RUN TestDetectLanguage/JavaScript_file -=== RUN TestDetectLanguage/JSX_file -=== RUN TestDetectLanguage/TypeScript_file -=== RUN TestDetectLanguage/TSX_file -=== RUN TestDetectLanguage/Rust_file -=== RUN TestDetectLanguage/Ruby_file -=== RUN TestDetectLanguage/Java_file -=== RUN TestDetectLanguage/C_file -=== RUN TestDetectLanguage/C++_file -=== RUN TestDetectLanguage/Header_file -=== RUN TestDetectLanguage/Shell_script -=== RUN TestDetectLanguage/Bash_script -=== RUN TestDetectLanguage/Unsupported_file -=== RUN TestDetectLanguage/No_extension -=== RUN TestDetectLanguage/Case_insensitive ---- PASS: TestDetectLanguage (0.00s) - --- PASS: TestDetectLanguage/Go_file (0.00s) - --- PASS: TestDetectLanguage/Python_file (0.00s) - --- PASS: TestDetectLanguage/JavaScript_file (0.00s) - --- PASS: TestDetectLanguage/JSX_file (0.00s) - --- PASS: TestDetectLanguage/TypeScript_file (0.00s) - --- PASS: TestDetectLanguage/TSX_file (0.00s) - --- PASS: TestDetectLanguage/Rust_file (0.00s) - --- PASS: TestDetectLanguage/Ruby_file (0.00s) - --- PASS: TestDetectLanguage/Java_file (0.00s) - --- PASS: TestDetectLanguage/C_file (0.00s) - --- PASS: TestDetectLanguage/C++_file (0.00s) - --- PASS: TestDetectLanguage/Header_file (0.00s) - --- PASS: TestDetectLanguage/Shell_script (0.00s) - --- PASS: TestDetectLanguage/Bash_script (0.00s) - --- PASS: TestDetectLanguage/Unsupported_file (0.00s) - --- PASS: TestDetectLanguage/No_extension (0.00s) - --- PASS: TestDetectLanguage/Case_insensitive (0.00s) -=== RUN TestCheckLinterAvailable -=== RUN TestCheckLinterAvailable/go_command_should_be_available - linter_test.go:84: go should be available on system with Go installed: available=true -=== RUN TestCheckLinterAvailable/nonexistent_command - linter_test.go:84: nonexistent command should not be available: available=false ---- PASS: TestCheckLinterAvailable (0.00s) - --- PASS: TestCheckLinterAvailable/go_command_should_be_available (0.00s) - --- PASS: TestCheckLinterAvailable/nonexistent_command (0.00s) -=== RUN TestFindAvailableLinter -=== RUN TestFindAvailableLinter/Go_language_should_find_a_linter -=== RUN TestFindAvailableLinter/Language_with_no_available_linters ---- PASS: TestFindAvailableLinter (0.00s) - --- PASS: TestFindAvailableLinter/Go_language_should_find_a_linter (0.00s) - --- PASS: TestFindAvailableLinter/Language_with_no_available_linters (0.00s) -=== RUN TestRunLinter -=== RUN TestRunLinter/Run_go_vet_on_valid_file - linter_test.go:179: go vet result: ExitCode=0, HasIssues=false, Output="" -=== RUN TestRunLinter/Run_nonexistent_linter ---- PASS: TestRunLinter (0.07s) - --- PASS: TestRunLinter/Run_go_vet_on_valid_file (0.07s) - --- PASS: TestRunLinter/Run_nonexistent_linter (0.00s) -=== RUN TestLintFile -=== RUN TestLintFile/Lint_valid_Go_file -=== RUN TestLintFile/Lint_nonexistent_file -=== RUN TestLintFile/Lint_unsupported_file_type ---- PASS: TestLintFile (0.20s) - --- PASS: TestLintFile/Lint_valid_Go_file (0.19s) - --- PASS: TestLintFile/Lint_nonexistent_file (0.00s) - --- PASS: TestLintFile/Lint_unsupported_file_type (0.00s) -=== RUN TestGetSupportedLanguages ---- PASS: TestGetSupportedLanguages (0.00s) -=== RUN TestLanguageStructure ---- PASS: TestLanguageStructure (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/linter 1.280s -=== RUN TestInit -=== RUN TestInit/default_level -=== RUN TestInit/debug_level -=== RUN TestInit/warn_level -=== RUN TestInit/error_level -=== RUN TestInit/invalid_level_defaults_to_info ---- PASS: TestInit (0.00s) - --- PASS: TestInit/default_level (0.00s) - --- PASS: TestInit/debug_level (0.00s) - --- PASS: TestInit/warn_level (0.00s) - --- PASS: TestInit/error_level (0.00s) - --- PASS: TestInit/invalid_level_defaults_to_info (0.00s) -=== RUN TestLogging -{"time":"2026-03-06T21:38:26.236151816Z","level":"DEBUG","msg":"test debug message","key":"value"} -{"time":"2026-03-06T21:38:26.236315178Z","level":"INFO","msg":"test info message","count":42} -{"time":"2026-03-06T21:38:26.236336913Z","level":"WARN","msg":"test warn message","enabled":true} -{"time":"2026-03-06T21:38:26.236352195Z","level":"ERROR","msg":"test error message","error":"something went wrong"} ---- PASS: TestLogging (0.00s) -=== RUN TestSetLevel ---- PASS: TestSetLevel (0.00s) -=== RUN TestWith ---- PASS: TestWith (0.00s) -=== RUN TestWithContext -=== RUN TestWithContext/without_init -=== RUN TestWithContext/with_init ---- PASS: TestWithContext (0.00s) - --- PASS: TestWithContext/without_init (0.00s) - --- PASS: TestWithContext/with_init (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/logger 1.011s -=== RUN TestExtractCodeBlocks -=== PAUSE TestExtractCodeBlocks -=== CONT TestExtractCodeBlocks -=== RUN TestExtractCodeBlocks/Single_block -=== RUN TestExtractCodeBlocks/Multiple_blocks -=== RUN TestExtractCodeBlocks/No_blocks -=== RUN TestExtractCodeBlocks/Incomplete_block ---- PASS: TestExtractCodeBlocks (0.00s) - --- PASS: TestExtractCodeBlocks/Single_block (0.00s) - --- PASS: TestExtractCodeBlocks/Multiple_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/No_blocks (0.00s) - --- PASS: TestExtractCodeBlocks/Incomplete_block (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/recipe 1.009s -=== RUN TestVersionInfo -=== PAUSE TestVersionInfo -=== CONT TestVersionInfo -=== RUN TestVersionInfo/Version -=== PAUSE TestVersionInfo/Version -=== RUN TestVersionInfo/Commit -=== PAUSE TestVersionInfo/Commit -=== RUN TestVersionInfo/BuildDate -=== PAUSE TestVersionInfo/BuildDate -=== CONT TestVersionInfo/BuildDate -=== CONT TestVersionInfo/Version -=== CONT TestVersionInfo/Commit ---- PASS: TestVersionInfo (0.00s) - --- PASS: TestVersionInfo/BuildDate (0.00s) - --- PASS: TestVersionInfo/Version (0.00s) - --- PASS: TestVersionInfo/Commit (0.00s) -PASS -ok gmgauthier.com/grokkit/internal/version 1.009s