# Upgrade Report: dappco.re/go/core v0.8.0-alpha.1 ## Scope - Repository: `core/go-container` - Branch: `agent/create-an-upgrade-plan-for-this-package` - Requested target: `dappco.re/go/core v0.8.0-alpha.1` - Consumers called out for break-risk review: `core`, `go-devops` ## Baseline Verification - `go build ./...`: passed - `go vet ./...`: passed - `go test ./... -count=1 -timeout 120s`: passed - `go test -cover ./...`: passed (`container` 81.7%, `cmd/vm` 0.0%, `devenv` 53.3%, `sources` 72.7%) - `go mod tidy`: not run because this task is report-only and should not introduce dependency churn ## 1. go.mod Upgrade Plan - Current core version: `dappco.re/go/core v0.5.0` at `go.mod:16` - Required bump: `dappco.re/go/core v0.5.0` -> `dappco.re/go/core v0.8.0-alpha.1` at `go.mod:16` - Direct `dappco.re/go/core/*` dependencies that should be compatibility-checked in the same upgrade pass: - `go.mod:6` `dappco.re/go/core/i18n v0.2.0` - `go.mod:7` `dappco.re/go/core/io v0.2.0` - `go.mod:8` `dappco.re/go/core/log v0.1.0` - Legacy `forge.lthn.ai` modules still present in `go.mod`; these should be reviewed during the core bump because they may pin older transitive core APIs: - `go.mod:9` `forge.lthn.ai/core/cli v0.3.7` - `go.mod:10` `forge.lthn.ai/core/config v0.1.8` - `go.mod:17` `forge.lthn.ai/core/go v0.3.3` - `go.mod:18` `forge.lthn.ai/core/go-i18n v0.1.7` - `go.mod:19` `forge.lthn.ai/core/go-inference v0.1.6` - `go.mod:20` `forge.lthn.ai/core/go-io v0.1.7` - `go.mod:21` `forge.lthn.ai/core/go-log v0.0.4` ## 2. Banned Stdlib Imports Each group lists every import site and the required Core replacement. ### `os` - Replacement: Replace with core.Env/core.Fs - `cmd/vm/cmd_container.go:7` - `cmd/vm/cmd_templates.go:6` - `devenv/claude.go:6` - `devenv/config.go:4` - `devenv/config_test.go:4` - `devenv/devops.go:7` - `devenv/devops_test.go:5` - `devenv/images.go:7` - `devenv/images_test.go:5` - `devenv/serve.go:6` - `devenv/serve_test.go:4` - `devenv/shell.go:6` - `devenv/ssh_utils.go:6` - `devenv/test_test.go:4` - `hypervisor.go:6` - `linuxkit.go:8` - `linuxkit_test.go:5` - `sources/cdn.go:8` - `sources/cdn_test.go:8` - `sources/github.go:5` - `state.go:5` - `state_test.go:4` - `templates.go:7` - `templates_test.go:4` ### `os/exec` - Replacement: No direct replacement was provided in the task; requires a manual audit for the v0.8.0-alpha.1 command-exec path - `cmd/vm/cmd_templates.go:7` - `devenv/claude.go:7` - `devenv/devops_test.go:6` - `devenv/serve.go:7` - `devenv/shell.go:7` - `devenv/ssh_utils.go:7` - `hypervisor.go:7` - `linuxkit.go:9` - `linuxkit_test.go:6` - `sources/github.go:6` ### `encoding/json` - Replacement: Replace with core.JSONMarshalString/JSONUnmarshalString - `devenv/images.go:5` - `devenv/test.go:5` - `state.go:4` ### `fmt` - Replacement: Replace with core.Sprintf/core.Concat/core.E - `cmd/vm/cmd_container.go:5` - `cmd/vm/cmd_templates.go:5` - `devenv/claude.go:5` - `devenv/devops.go:6` - `devenv/images.go:6` - `devenv/serve.go:5` - `devenv/shell.go:5` - `devenv/ssh_utils.go:5` - `hypervisor.go:5` - `linuxkit.go:6` - `sources/cdn.go:5` - `sources/cdn_test.go:5` ### `errors` - Replacement: Replace with core.E/core.Is - No occurrences found ### `strings` - Replacement: Replace with core.Contains/core.HasPrefix/core.Split/core.Trim/core.Replace - `cmd/vm/cmd_container.go:8` - `cmd/vm/cmd_templates.go:9` - `devenv/claude.go:9` - `devenv/ssh_utils.go:9` - `devenv/test.go:7` - `hypervisor.go:10` - `sources/github.go:7` - `templates.go:11` - `templates_test.go:6` ### `path/filepath` - Replacement: Replace with core.JoinPath/core.PathBase/core.PathDir - `cmd/vm/cmd_templates.go:8` - `devenv/claude.go:8` - `devenv/config.go:5` - `devenv/config_test.go:5` - `devenv/devops.go:8` - `devenv/devops_test.go:7` - `devenv/images.go:8` - `devenv/images_test.go:6` - `devenv/serve.go:8` - `devenv/serve_test.go:5` - `devenv/ssh_utils.go:8` - `devenv/test.go:6` - `devenv/test_test.go:5` - `hypervisor.go:8` - `linuxkit_test.go:7` - `sources/cdn.go:9` - `sources/cdn_test.go:9` - `state.go:6` - `state_test.go:5` - `templates.go:8` - `templates_test.go:5` ## 3. Tests Not Matching `TestFile_Function_{Good,Bad,Ugly}` - Total mismatches found: 236 - `devenv/claude_test.go:9` `TestClaudeOptions_Default` - `devenv/claude_test.go:16` `TestClaudeOptions_Custom` - `devenv/claude_test.go:27` `TestFormatAuthList_Good_NoAuth` - `devenv/claude_test.go:33` `TestFormatAuthList_Good_Default` - `devenv/claude_test.go:39` `TestFormatAuthList_Good_CustomAuth` - `devenv/claude_test.go:47` `TestFormatAuthList_Good_MultipleAuth` - `devenv/claude_test.go:55` `TestFormatAuthList_Good_EmptyAuth` - `devenv/config_test.go:13` `TestDefaultConfig` - `devenv/config_test.go:20` `TestConfigPath` - `devenv/config_test.go:26` `TestLoadConfig_Good` - `devenv/config_test.go:65` `TestLoadConfig_Bad` - `devenv/config_test.go:82` `TestConfig_Struct` - `devenv/config_test.go:105` `TestDefaultConfig_Complete` - `devenv/config_test.go:114` `TestLoadConfig_Good_PartialConfig` - `devenv/config_test.go:139` `TestLoadConfig_Good_AllSourceTypes` - `devenv/config_test.go:208` `TestImagesConfig_Struct` - `devenv/config_test.go:217` `TestGitHubConfig_Struct` - `devenv/config_test.go:222` `TestRegistryConfig_Struct` - `devenv/config_test.go:227` `TestCDNConfig_Struct` - `devenv/config_test.go:232` `TestLoadConfig_Bad_UnreadableFile` - `devenv/devops_test.go:18` `TestImageName` - `devenv/devops_test.go:26` `TestImagesDir` - `devenv/devops_test.go:48` `TestImagePath` - `devenv/devops_test.go:58` `TestDefaultBootOptions` - `devenv/devops_test.go:66` `TestIsInstalled_Bad` - `devenv/devops_test.go:78` `TestIsInstalled_Good` - `devenv/devops_test.go:142` `TestDevOps_Status_Good_NotInstalled` - `devenv/devops_test.go:168` `TestDevOps_Status_Good_NoContainer` - `devenv/devops_test.go:232` `TestDevOps_IsRunning_Bad_NotRunning` - `devenv/devops_test.go:255` `TestDevOps_IsRunning_Bad_ContainerStopped` - `devenv/devops_test.go:323` `TestDevOps_findContainer_Bad_NotFound` - `devenv/devops_test.go:346` `TestDevOps_Stop_Bad_NotFound` - `devenv/devops_test.go:369` `TestBootOptions_Custom` - `devenv/devops_test.go:382` `TestDevStatus_Struct` - `devenv/devops_test.go:403` `TestDevOps_Boot_Bad_NotInstalled` - `devenv/devops_test.go:426` `TestDevOps_Boot_Bad_AlreadyRunning` - `devenv/devops_test.go:465` `TestDevOps_Status_Good_WithImageVersion` - `devenv/devops_test.go:501` `TestDevOps_findContainer_Good_MultipleContainers` - `devenv/devops_test.go:546` `TestDevOps_Status_Good_ContainerWithUptime` - `devenv/devops_test.go:583` `TestDevOps_IsRunning_Bad_DifferentContainerName` - `devenv/devops_test.go:618` `TestDevOps_Boot_Good_FreshFlag` - `devenv/devops_test.go:668` `TestDevOps_Stop_Bad_ContainerNotRunning` - `devenv/devops_test.go:703` `TestDevOps_Boot_Good_FreshWithNoExisting` - `devenv/devops_test.go:741` `TestImageName_Format` - `devenv/devops_test.go:750` `TestDevOps_Install_Delegates` - `devenv/devops_test.go:768` `TestDevOps_CheckUpdate_Delegates` - `devenv/devops_test.go:786` `TestDevOps_Boot_Good_Success` - `devenv/devops_test.go:818` `TestDevOps_Config` - `devenv/images_test.go:16` `TestImageManager_Good_IsInstalled` - `devenv/images_test.go:36` `TestNewImageManager_Good` - `devenv/images_test.go:66` `TestManifest_Save` - `devenv/images_test.go:94` `TestLoadManifest_Bad` - `devenv/images_test.go:106` `TestCheckUpdate_Bad` - `devenv/images_test.go:121` `TestNewImageManager_Good_AutoSource` - `devenv/images_test.go:134` `TestNewImageManager_Good_UnknownSourceFallsToAuto` - `devenv/images_test.go:147` `TestLoadManifest_Good_Empty` - `devenv/images_test.go:159` `TestLoadManifest_Good_ExistingData` - `devenv/images_test.go:174` `TestImageInfo_Struct` - `devenv/images_test.go:187` `TestManifest_Save_Good_CreatesDirs` - `devenv/images_test.go:207` `TestManifest_Save_Good_Overwrite` - `devenv/images_test.go:239` `TestImageManager_Install_Bad_NoSourceAvailable` - `devenv/images_test.go:256` `TestNewImageManager_Good_CreatesDir` - `devenv/images_test.go:295` `TestImageManager_Install_Good_WithMockSource` - `devenv/images_test.go:323` `TestImageManager_Install_Bad_DownloadError` - `devenv/images_test.go:345` `TestImageManager_Install_Bad_VersionError` - `devenv/images_test.go:367` `TestImageManager_Install_Good_SkipsUnavailableSource` - `devenv/images_test.go:396` `TestImageManager_CheckUpdate_Good_WithMockSource` - `devenv/images_test.go:426` `TestImageManager_CheckUpdate_Good_NoUpdate` - `devenv/images_test.go:456` `TestImageManager_CheckUpdate_Bad_NoSource` - `devenv/images_test.go:483` `TestImageManager_CheckUpdate_Bad_VersionError` - `devenv/images_test.go:511` `TestImageManager_Install_Bad_EmptySources` - `devenv/images_test.go:527` `TestImageManager_Install_Bad_AllUnavailable` - `devenv/images_test.go:546` `TestImageManager_CheckUpdate_Good_FirstSourceUnavailable` - `devenv/images_test.go:573` `TestManifest_Struct` - `devenv/serve_test.go:12` `TestDetectServeCommand_Good_Laravel` - `devenv/serve_test.go:21` `TestDetectServeCommand_Good_NodeDev` - `devenv/serve_test.go:31` `TestDetectServeCommand_Good_NodeStart` - `devenv/serve_test.go:41` `TestDetectServeCommand_Good_PHP` - `devenv/serve_test.go:50` `TestDetectServeCommand_Good_GoMain` - `devenv/serve_test.go:61` `TestDetectServeCommand_Good_GoWithoutMain` - `devenv/serve_test.go:71` `TestDetectServeCommand_Good_Django` - `devenv/serve_test.go:80` `TestDetectServeCommand_Good_Fallback` - `devenv/serve_test.go:87` `TestDetectServeCommand_Good_Priority` - `devenv/serve_test.go:99` `TestServeOptions_Default` - `devenv/serve_test.go:105` `TestServeOptions_Custom` - `devenv/serve_test.go:114` `TestHasFile_Good` - `devenv/serve_test.go:123` `TestHasFile_Bad` - `devenv/serve_test.go:129` `TestHasFile_Bad_Directory` - `devenv/shell_test.go:9` `TestShellOptions_Default` - `devenv/shell_test.go:15` `TestShellOptions_Console` - `devenv/shell_test.go:23` `TestShellOptions_Command` - `devenv/shell_test.go:31` `TestShellOptions_ConsoleWithCommand` - `devenv/shell_test.go:40` `TestShellOptions_EmptyCommand` - `devenv/test_test.go:11` `TestDetectTestCommand_Good_ComposerJSON` - `devenv/test_test.go:21` `TestDetectTestCommand_Good_PackageJSON` - `devenv/test_test.go:31` `TestDetectTestCommand_Good_GoMod` - `devenv/test_test.go:41` `TestDetectTestCommand_Good_CoreTestYaml` - `devenv/test_test.go:53` `TestDetectTestCommand_Good_Pytest` - `devenv/test_test.go:63` `TestDetectTestCommand_Good_Taskfile` - `devenv/test_test.go:73` `TestDetectTestCommand_Bad_NoFiles` - `devenv/test_test.go:82` `TestDetectTestCommand_Good_Priority` - `devenv/test_test.go:96` `TestLoadTestConfig_Good` - `devenv/test_test.go:135` `TestLoadTestConfig_Bad_NotFound` - `devenv/test_test.go:144` `TestHasPackageScript_Good` - `devenv/test_test.go:156` `TestHasPackageScript_Bad_MissingScript` - `devenv/test_test.go:165` `TestHasComposerScript_Good` - `devenv/test_test.go:174` `TestHasComposerScript_Bad_MissingScript` - `devenv/test_test.go:183` `TestTestConfig_Struct` - `devenv/test_test.go:204` `TestTestCommand_Struct` - `devenv/test_test.go:217` `TestTestOptions_Struct` - `devenv/test_test.go:230` `TestDetectTestCommand_Good_TaskfileYml` - `devenv/test_test.go:240` `TestDetectTestCommand_Good_Pyproject` - `devenv/test_test.go:250` `TestHasPackageScript_Bad_NoFile` - `devenv/test_test.go:258` `TestHasPackageScript_Bad_InvalidJSON` - `devenv/test_test.go:267` `TestHasPackageScript_Bad_NoScripts` - `devenv/test_test.go:276` `TestHasComposerScript_Bad_NoFile` - `devenv/test_test.go:284` `TestHasComposerScript_Bad_InvalidJSON` - `devenv/test_test.go:293` `TestHasComposerScript_Bad_NoScripts` - `devenv/test_test.go:302` `TestLoadTestConfig_Bad_InvalidYAML` - `devenv/test_test.go:314` `TestLoadTestConfig_Good_MinimalConfig` - `devenv/test_test.go:332` `TestDetectTestCommand_Good_ComposerWithoutScript` - `devenv/test_test.go:344` `TestDetectTestCommand_Good_PackageJSONWithoutScript` - `hypervisor_test.go:23` `TestQemuHypervisor_Available_Bad_InvalidBinary` - `hypervisor_test.go:47` `TestHyperkitHypervisor_Available_Bad_NotDarwin` - `hypervisor_test.go:59` `TestHyperkitHypervisor_Available_Bad_InvalidBinary` - `hypervisor_test.go:69` `TestIsKVMAvailable_Good` - `hypervisor_test.go:83` `TestDetectHypervisor_Good` - `hypervisor_test.go:98` `TestGetHypervisor_Good_Qemu` - `hypervisor_test.go:110` `TestGetHypervisor_Good_QemuUppercase` - `hypervisor_test.go:122` `TestGetHypervisor_Good_Hyperkit` - `hypervisor_test.go:140` `TestGetHypervisor_Bad_Unknown` - `hypervisor_test.go:147` `TestQemuHypervisor_BuildCommand_Good_WithPortsAndVolumes` - `hypervisor_test.go:175` `TestQemuHypervisor_BuildCommand_Good_QCow2Format` - `hypervisor_test.go:195` `TestQemuHypervisor_BuildCommand_Good_VMDKFormat` - `hypervisor_test.go:215` `TestQemuHypervisor_BuildCommand_Good_RawFormat` - `hypervisor_test.go:235` `TestHyperkitHypervisor_BuildCommand_Good_WithPorts` - `hypervisor_test.go:258` `TestHyperkitHypervisor_BuildCommand_Good_QCow2Format` - `hypervisor_test.go:269` `TestHyperkitHypervisor_BuildCommand_Good_RawFormat` - `hypervisor_test.go:280` `TestHyperkitHypervisor_BuildCommand_Good_NoPorts` - `hypervisor_test.go:296` `TestQemuHypervisor_BuildCommand_Good_NoSSHPort` - `hypervisor_test.go:312` `TestQemuHypervisor_BuildCommand_Bad_UnknownFormat` - `hypervisor_test.go:323` `TestHyperkitHypervisor_BuildCommand_Bad_UnknownFormat` - `hypervisor_test.go:339` `TestHyperkitHypervisor_BuildCommand_Good_ISOFormat` - `linuxkit_test.go:76` `TestNewLinuxKitManagerWithHypervisor_Good` - `linuxkit_test.go:89` `TestLinuxKitManager_Run_Good_Detached` - `linuxkit_test.go:128` `TestLinuxKitManager_Run_Good_DefaultValues` - `linuxkit_test.go:153` `TestLinuxKitManager_Run_Bad_ImageNotFound` - `linuxkit_test.go:164` `TestLinuxKitManager_Run_Bad_UnsupportedFormat` - `linuxkit_test.go:204` `TestLinuxKitManager_Stop_Bad_NotFound` - `linuxkit_test.go:214` `TestLinuxKitManager_Stop_Bad_NotRunning` - `linuxkit_test.go:251` `TestLinuxKitManager_List_Good_VerifiesRunningStatus` - `linuxkit_test.go:303` `TestLinuxKitManager_Logs_Bad_NotFound` - `linuxkit_test.go:313` `TestLinuxKitManager_Logs_Bad_NoLogFile` - `linuxkit_test.go:336` `TestLinuxKitManager_Exec_Bad_NotFound` - `linuxkit_test.go:346` `TestLinuxKitManager_Exec_Bad_NotRunning` - `linuxkit_test.go:359` `TestDetectImageFormat_Good` - `linuxkit_test.go:381` `TestDetectImageFormat_Bad_Unknown` - `linuxkit_test.go:429` `TestLinuxKitManager_Logs_Good_Follow` - `linuxkit_test.go:467` `TestFollowReader_Read_Good_WithData` - `linuxkit_test.go:500` `TestFollowReader_Read_Good_ContextCancel` - `linuxkit_test.go:544` `TestNewFollowReader_Bad_FileNotFound` - `linuxkit_test.go:551` `TestLinuxKitManager_Run_Bad_BuildCommandError` - `linuxkit_test.go:570` `TestLinuxKitManager_Run_Good_Foreground` - `linuxkit_test.go:598` `TestLinuxKitManager_Stop_Good_ContextCancelled` - `linuxkit_test.go:635` `TestIsProcessRunning_Good_ExistingProcess` - `linuxkit_test.go:641` `TestIsProcessRunning_Bad_NonexistentProcess` - `linuxkit_test.go:647` `TestLinuxKitManager_Run_Good_WithPortsAndVolumes` - `linuxkit_test.go:676` `TestFollowReader_Read_Bad_ReaderError` - `linuxkit_test.go:697` `TestLinuxKitManager_Run_Bad_StartError` - `linuxkit_test.go:718` `TestLinuxKitManager_Run_Bad_ForegroundStartError` - `linuxkit_test.go:739` `TestLinuxKitManager_Run_Good_ForegroundWithError` - `linuxkit_test.go:762` `TestLinuxKitManager_Stop_Good_ProcessExitedWhileRunning` - `sources/cdn_test.go:16` `TestCDNSource_Good_Available` - `sources/cdn_test.go:26` `TestCDNSource_Bad_NoURL` - `sources/cdn_test.go:118` `TestCDNSource_LatestVersion_Bad_NoManifest` - `sources/cdn_test.go:134` `TestCDNSource_LatestVersion_Bad_ServerError` - `sources/cdn_test.go:150` `TestCDNSource_Download_Good_NoProgress` - `sources/cdn_test.go:174` `TestCDNSource_Download_Good_LargeFile` - `sources/cdn_test.go:206` `TestCDNSource_Download_Bad_HTTPErrorCodes` - `sources/cdn_test.go:238` `TestCDNSource_InterfaceCompliance` - `sources/cdn_test.go:243` `TestCDNSource_Config` - `sources/cdn_test.go:254` `TestNewCDNSource_Good` - `sources/cdn_test.go:268` `TestCDNSource_Download_Good_CreatesDestDir` - `sources/cdn_test.go:294` `TestSourceConfig_Struct` - `sources/github_test.go:9` `TestGitHubSource_Good_Available` - `sources/github_test.go:23` `TestGitHubSource_Name` - `sources/github_test.go:28` `TestGitHubSource_Config` - `sources/github_test.go:40` `TestGitHubSource_Good_Multiple` - `sources/github_test.go:51` `TestNewGitHubSource_Good` - `sources/github_test.go:65` `TestGitHubSource_InterfaceCompliance` - `sources/source_test.go:9` `TestSourceConfig_Empty` - `sources/source_test.go:17` `TestSourceConfig_Complete` - `sources/source_test.go:31` `TestImageSource_Interface` - `state_test.go:13` `TestNewState_Good` - `state_test.go:21` `TestLoadState_Good_NewFile` - `state_test.go:33` `TestLoadState_Good_ExistingFile` - `state_test.go:64` `TestLoadState_Bad_InvalidJSON` - `state_test.go:142` `TestState_Get_Bad_NotFound` - `state_test.go:162` `TestState_SaveState_Good_CreatesDirectory` - `state_test.go:177` `TestDefaultStateDir_Good` - `state_test.go:183` `TestDefaultStatePath_Good` - `state_test.go:189` `TestDefaultLogsDir_Good` - `state_test.go:195` `TestLogPath_Good` - `state_test.go:201` `TestEnsureLogsDir_Good` - `state_test.go:211` `TestGenerateID_Good` - `templates_test.go:13` `TestListTemplates_Good` - `templates_test.go:44` `TestGetTemplate_Good_CoreDev` - `templates_test.go:55` `TestGetTemplate_Good_ServerPhp` - `templates_test.go:66` `TestGetTemplate_Bad_NotFound` - `templates_test.go:73` `TestApplyVariables_Good_SimpleSubstitution` - `templates_test.go:86` `TestApplyVariables_Good_WithDefaults` - `templates_test.go:99` `TestApplyVariables_Good_AllDefaults` - `templates_test.go:109` `TestApplyVariables_Good_MixedSyntax` - `templates_test.go:128` `TestApplyVariables_Good_EmptyDefault` - `templates_test.go:138` `TestApplyVariables_Bad_MissingRequired` - `templates_test.go:149` `TestApplyVariables_Bad_MultipleMissing` - `templates_test.go:164` `TestApplyTemplate_Good` - `templates_test.go:178` `TestApplyTemplate_Bad_TemplateNotFound` - `templates_test.go:189` `TestApplyTemplate_Bad_MissingVariable` - `templates_test.go:199` `TestExtractVariables_Good` - `templates_test.go:221` `TestExtractVariables_Good_NoVariables` - `templates_test.go:230` `TestExtractVariables_Good_OnlyDefaults` - `templates_test.go:241` `TestScanUserTemplates_Good` - `templates_test.go:265` `TestScanUserTemplates_Good_MultipleTemplates` - `templates_test.go:287` `TestScanUserTemplates_Good_EmptyDirectory` - `templates_test.go:295` `TestScanUserTemplates_Bad_NonexistentDirectory` - `templates_test.go:301` `TestExtractTemplateDescription_Good` - `templates_test.go:318` `TestExtractTemplateDescription_Good_NoComments` - `templates_test.go:333` `TestExtractTemplateDescription_Bad_FileNotFound` - `templates_test.go:339` `TestVariablePatternEdgeCases_Good` - `templates_test.go:387` `TestScanUserTemplates_Good_SkipsBuiltinNames` - `templates_test.go:405` `TestScanUserTemplates_Good_SkipsDirectories` - `templates_test.go:422` `TestScanUserTemplates_Good_YamlExtension` - `templates_test.go:443` `TestExtractTemplateDescription_Good_EmptyComment` - `templates_test.go:461` `TestExtractTemplateDescription_Good_MultipleEmptyComments` - `templates_test.go:481` `TestScanUserTemplates_Good_DefaultDescription` ## 4. Exported Functions Missing Usage-Example Doc Comments - Total exported functions missing a usage example marker: 38 - Note: every function listed below has a doc comment, but none of the comments include an obvious usage example marker such as `Usage:` or `Example:`. - `cmd/vm/cmd_templates.go:150` `RunFromTemplate` (missing usage example) - `cmd/vm/cmd_templates.go:296` `ParseVarFlags` (missing usage example) - `cmd/vm/cmd_vm.go:28` `AddVMCommands` (missing usage example) - `container.go:84` `GenerateID` (missing usage example) - `devenv/config.go:41` `DefaultConfig` (missing usage example) - `devenv/config.go:57` `ConfigPath` (missing usage example) - `devenv/config.go:67` `LoadConfig` (missing usage example) - `devenv/devops.go:31` `New` (missing usage example) - `devenv/devops.go:56` `ImageName` (missing usage example) - `devenv/devops.go:61` `ImagesDir` (missing usage example) - `devenv/devops.go:73` `ImagePath` (missing usage example) - `devenv/devops.go:109` `DefaultBootOptions` (missing usage example) - `devenv/images.go:40` `NewImageManager` (missing usage example) - `devenv/serve.go:75` `DetectServeCommand` (missing usage example) - `devenv/test.go:75` `DetectTestCommand` (missing usage example) - `devenv/test.go:115` `LoadTestConfig` (missing usage example) - `hypervisor.go:50` `NewQemuHypervisor` (missing usage example) - `hypervisor.go:155` `NewHyperkitHypervisor` (missing usage example) - `hypervisor.go:222` `DetectImageFormat` (missing usage example) - `hypervisor.go:239` `DetectHypervisor` (missing usage example) - `hypervisor.go:258` `GetHypervisor` (missing usage example) - `linuxkit.go:25` `NewLinuxKitManager` (missing usage example) - `linuxkit.go:49` `NewLinuxKitManagerWithHypervisor` (missing usage example) - `sources/cdn.go:24` `NewCDNSource` (missing usage example) - `sources/github.go:22` `NewGitHubSource` (missing usage example) - `state.go:22` `DefaultStateDir` (missing usage example) - `state.go:31` `DefaultStatePath` (missing usage example) - `state.go:40` `DefaultLogsDir` (missing usage example) - `state.go:49` `NewState` (missing usage example) - `state.go:58` `LoadState` (missing usage example) - `state.go:157` `LogPath` (missing usage example) - `state.go:166` `EnsureLogsDir` (missing usage example) - `templates.go:47` `ListTemplates` (missing usage example) - `templates.go:52` `ListTemplatesIter` (missing usage example) - `templates.go:75` `GetTemplate` (missing usage example) - `templates.go:107` `ApplyTemplate` (missing usage example) - `templates.go:120` `ApplyVariables` (missing usage example) - `templates.go:169` `ExtractVariables` (missing usage example) ## Risk Notes - Breaking-change surface is moderate because this repo is consumed by two modules: `core` and `go-devops`. - The highest-effort part of the upgrade is not the version bump itself; it is the repo-wide removal of banned stdlib imports, especially the current `os/exec` usage across runtime code and tests. - The doc-comment and test-renaming work is mechanically simple, but it touches many files and will create broad diff surface for downstream review.