grokkit/test_output_race.txt
Greg Gauthier 824bbcb85f refactor(recipe): simplify code block extraction regex
Update the regex in runner.go to use string concatenation for better readability.
Add test output files as fixtures for test verification.
2026-03-06 21:40:03 +00:00

645 lines
28 KiB
Plaintext

? 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)