# 测试能力清单 > 此文件由 `scripts/manage_test_manifest.py render` 自动生成,请勿手工编辑。 | Capability ID | 中文标题 | 状态 | 测试类型 | 业务入口 | 测试文件 | |---|---|---|---|---|---| | rainbond.api-gateway.vm-nodeport-service-uses-local-external-traffic-policy | Use Local externalTrafficPolicy for VM NodePort services | active | regression | api.controller.apigateway.Struct.CreateTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteSetsExternalTrafficPolicyLocalForVMService | | rainbond.api.apiserver-request-metrics | Collect missing API server request counters through existing rbd-api metrics | active | regression | api/metric.NewAPIServerCollector | api/metric/apiserver_test.go
api/client/prometheus/prometheus_timeout_test.go::TestGetMetricHonorsCallerDeadline
api/client/prometheus/prometheus_timeout_test.go::TestGetMetricCallerContextPreservesSuccessfulResults | | rainbond.api.kubeblocks.adapter-service-namespace | KubeBlocks adapter service namespace | active | regression | api/controller.KubeBlocksController.forwardRequest | api/controller/kubeblocks_test.go::TestKubeBlocksAdapterBaseURLUsesPluginNamespace | | rainbond.api.kubeblocks.backup-repo-mutation-proxy | KubeBlocks backup repo mutation proxy | active | regression | api/controller.KubeBlocksController.CreateBackupRepo | api/controller/kubeblocks_test.go::TestKubeBlocksBackupRepoMutationProxy | | rainbond.app-backup.metadata-version-detect | 识别旧版与新版应用备份元数据结构 | active | regression | builder/exector.judgeMetadataVersion | builder/exector/groupapp_backup_test.go::TestJudgeMetadataVersion | | rainbond.app-backup.service-volume-archive | 将服务卷数据归档为备份包 | active | regression | builder/exector.BackupAPPNew.backupServiceInfo | builder/exector/groupapp_backup_test.go::TestBackupServiceVolume | | rainbond.app-backup.upload-package | 将应用备份包上传到外部存储 | active | integration | builder/exector.BackupAPPNew.uploadPkg | builder/exector/groupapp_backup_test.go::TestUploadPkg | | rainbond.app-backup.upload-package-download-guard | 在备份包上传流程中保护已移除的下载接口 | active | integration | builder/exector.BackupAPPNew.uploadPkg | builder/exector/groupapp_backup_test.go::TestUploadPkg2 | | rainbond.app-backup.volume-dir-defaults | 根据环境变量解析本地与共享备份卷目录 | active | regression | builder/exector.GetVolumeDir | builder/exector/groupapp_backup_test.go::TestGetVolumeDir | | rainbond.app-config-group.bind-component | 将组件绑定到应用配置组 | active | regression | db/mysql/dao.AppConfigGroupServiceDaoImpl.AddModel | db/mysql/dao/application_config_group_test.go::TestAppConfigGroupServiceDaoAddModel | | rainbond.app-config-group.create | 创建应用配置组记录 | active | regression | db/mysql/dao.AppConfigGroupDaoImpl.AddModel | db/mysql/dao/application_config_group_test.go::TestAppConfigGroupDaoAddModel | | rainbond.app-config-group.delete | 删除应用配置组记录 | active | regression | db/mysql/dao.AppConfigGroupDaoImpl.DeleteConfigGroup | db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroup | | rainbond.app-config-group.get | 查询应用配置组记录 | active | regression | db/mysql/dao.AppConfigGroupDaoImpl.GetConfigGroupByID | db/mysql/dao/application_config_group_test.go::TestAppGetConfigGroupByID | | rainbond.app-config-group.item-create | 创建应用配置项 | active | regression | db/mysql/dao.AppConfigGroupItemDaoImpl.AddModel | db/mysql/dao/application_config_group_test.go::TestAppConfigGroupItemDaoAddModel | | rainbond.app-config-group.item-delete | 删除应用配置项 | active | regression | db/mysql/dao.AppConfigGroupItemDaoImpl.DeleteConfigGroupItem | db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroupItem | | rainbond.app-config-group.item-update | 更新应用配置项 | active | regression | db/mysql/dao.AppConfigGroupItemDaoImpl.UpdateModel | db/mysql/dao/application_config_group_test.go::TestAppConfigGroupItemDaoUpdateModel | | rainbond.app-config-group.pending-component-bindings | Preserve configuration bindings before component creation | active | regression | api/handler.ApplicationAction.AddConfigGroup/UpdateConfigGroup | api/handler/application_config_group_test.go::TestConfigGroupRetainsPendingComponentBindings | | rainbond.app-config-group.unbind-components | 移除应用配置组组件绑定 | active | regression | db/mysql/dao.AppConfigGroupServiceDaoImpl.DeleteConfigGroupService | db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroupService | | rainbond.app-import.package-name-normalize | 从 Linux 文件名还原导入镜像包名 | active | regression | builder/exector.buildFromLinuxFileName | builder/exector/import_app_test.go::TestBuildFromLinuxFileName | | rainbond.app-import.propagate-image-push-error | Return imported image push errors during app import | active | regression | builder/exector.ensureImportedImagesPushed | builder/exector/import_app_test.go::TestEnsureImportedImagesPushedReturnsPushError | | rainbond.app-import.propagate-task-error | Return app import task errors to the import worker | active | regression | builder/exector.runImportAppTasks | builder/exector/import_app_test.go::TestRunImportAppTasksReturnsTaskError | | rainbond.app-import.scaling-rule-compat | 导入应用时保留旧版伸缩规则 | active | regression | builder/exector.normalizeImportedRAM | builder/exector/import_app_test.go::TestNormalizeImportedRAMPreservesLegacyScalingRule | | rainbond.app-import.status-serialization | 序列化并解析按应用记录的导入状态 | active | regression | builder/exector.map2str | builder/exector/import_app_test.go::TestAppStatusMapRoundTrip | | rainbond.app-import.wait-image-push | Wait for imported component and plugin images to be pushed | active | regression | builder/exector.ensureImportedImagesPushed | builder/exector/import_app_test.go::TestEnsureImportedImagesPushedPushesComponentsAndPluginsOnce | | rainbond.app-restore.image-registry-rewrite | 应用恢复时重写镜像仓库地址 | active | regression | builder/exector.getNewImageName | builder/exector/groupapp_restore_test.go::TestGetImageName | | rainbond.app-restore.service-id-lookup | 从恢复后的服务映射中反查原始服务 ID | active | regression | builder/exector.BackupAPPRestore.getOldServiceID | builder/exector/groupapp_restore_test.go::TestGetOldServiceID | | rainbond.app-restore.snapshot-relationship-rewrite | 应用恢复时重写服务依赖关系 | active | regression | builder/exector.BackupAPPRestore.modify | builder/exector/groupapp_restore_test.go::TestModify | | rainbond.app-restore.unzip-all-data | 在恢复时解压完整备份数据包 | active | regression | builder/exector.BackupAPPRestore | builder/exector/groupapp_restore_test.go::TestUnzipAllDataFile | | rainbond.app-upgrade.cross-app-config-mount | Preserve cross-application config-file mounts during upgrade | active | regression | api/handler.ServiceAction.SyncComponentVolumeRels | api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsPreservesCrossApplicationConfigFileMount
api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsRejectsInvalidExternalProviders
api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsReturnsExternalProviderLookupError | | rainbond.application.check-port-k8s-service-name-duplicate | 校验应用端口 Kubernetes Service 名称重复 | active | regression | api/handler.ApplicationAction.checkPorts | api/handler/application_handler_test.go::TestApplicationActionCheckPortsRejectsDuplicateK8sServiceName | | rainbond.application.delete-config-secrets | Delete config group Secrets with applications | active | regression | api/handler.ApplicationAction.deleteApplicationConfigSecrets | api/handler/application_handler_test.go::TestApplicationActionDeleteApplicationConfigSecrets | | rainbond.build.select-builder-by-language | 按源码语言和构建类型选择构建器 | active | regression | builder/build.GetBuildByType | builder/build/build_type_matrix_test.go::TestGetBuildByType_SourceBuildLanguageMatrix | | rainbond.builder.build-pod-resources | Chaos 环境变量控制构建 Pod CPU 和内存 | active | regression | builder/job.controller.ExecJob | builder/job/resources_test.go::TestApplyBuildPodResourcesFromEnv
builder/job/resources_test.go::TestApplyBuildPodResourcesRejectsInvalidConfig
builder/job/resources_test.go::TestExecJobAppliesResourcesBeforeCreate
builder/job/resources_test.go::TestExecJobReusesExistingPodWithoutApplyingResources | | rainbond.builder.dynamic-mirror-config | Dynamic mirror config defaults and env overrides | active | unit | builder/mirror.LoadConfig | builder/mirror/config_test.go::TestLoadConfigDefaults | | rainbond.builder.dynamic-mirror-fetch | Fetch mirror candidates from remote JSON source with schema validation | active | unit | builder/mirror.FetchCandidates | builder/mirror/fetcher_test.go::TestFetchCandidates | | rainbond.builder.dynamic-mirror-fetch-fallback | Mirror source fetch falls back to next URL on failure | active | unit | builder/mirror.FetchCandidates | builder/mirror/fetcher_test.go::TestFetchCandidatesFallsBackToNextURL | | rainbond.builder.dynamic-mirror-probe | Probe filters dead mirrors and sorts alive ones by latency | active | unit | builder/mirror.Probe | builder/mirror/prober_test.go::TestProbeFiltersAndSortsByLatency | | rainbond.builder.dynamic-mirror-refresh | Mirror manager refresh updates list and persists configmap | active | unit | builder/mirror.Manager.Refresh | builder/mirror/manager_test.go::TestManagerRefreshUpdatesMirrorsAndConfigMap | | rainbond.builder.dynamic-mirror-restore | Mirror manager restores last good list from configmap | active | unit | builder/mirror.Manager.restore | builder/mirror/manager_test.go::TestManagerRestoreFromConfigMap | | rainbond.builder.mirror-containerd-hosts | containerd pulls try docker.io mirrors first with upstream fallback | active | unit | builder/sources.mirrorRegistryHosts | builder/sources/mirror_hosts_test.go::TestMirrorRegistryHosts | | rainbond.builder.mirror-docker-ref-rewrite | docker daemon pulls rewrite docker.io refs to mirrors with fallback order | active | unit | builder/sources.mirrorPullRefs | builder/sources/mirror_hosts_test.go::TestMirrorPullRefs | | rainbond.builder.mirror-merge-manual-priority | Manual REGISTRY_MIRRORS take priority over dynamic mirrors with host dedup | active | unit | builder/sources.mergeMirrors | builder/sources/mirror_merge_test.go::TestMergeMirrors | | rainbond.builder.registered-worker-dispatch | 已注册 worker 分发时不再误报未知任务 | active | regression | builder/exector.exectorManager.RunTask | builder/exector/exector_test.go::TestRunTaskDoesNotWarnForRegisteredWorker | | rainbond.builder.source-type-compatibility | Normalize blank source build types without changing explicit protocols | active | regression | builder/exector.NewSouceCodeBuildItem | builder/exector/source_server_type_test.go::TestNewSourceBuildServerType | | rainbond.cleanup.activation-registry-coordination | Rollback and activation cannot reference deleting images | active | regression | cleanup.TrackServiceActivation | pkg/cleanup/activation_coordination_test.go::TestActivationAndRollbackRejectDeletingImage | | rainbond.cleanup.app-import-admission | Hold application import admission through metadata publication | active | integration | exector.exec.import_app | builder/exector/cleanup_import_admission_test.go::TestImportWorkerHoldsAdmissionUntilPublication
builder/exector/cleanup_import_admission_test.go::TestImportSuccessWaitsForMetadataUpload | | rainbond.cleanup.cache-builder-startup | Enroll actual cache writer before task consumption | active | integration | exector.registerCacheBuilderStartup | builder/exector/cleanup_cache_startup_test.go::TestCacheStartupRegistersActualInstanceWithoutEnablingDeletion | | rainbond.cleanup.cache-observation-before-readiness | Observe cache storage without enabling legacy writer deletion | active | regression | kubeidentity.InspectManagedBuildCacheSource | pkg/cleanup/kubeidentity/managed_cache_test.go::TestReadOnlyCacheEnrollmentDoesNotRequireDeletionReadiness | | rainbond.cleanup.cache-writer-certification | Certify cache readiness only with current membership and no writers | active | integration | cleanup.CertifyManagedCacheWriters | pkg/cleanup/cache_certification_test.go::TestCacheCertificationRequiresMembershipAndQuiescence | | rainbond.cleanup.cache-writer-coverage | Verify current coordinated writer rollout and detached builds | active | regression | kubeidentity.InspectCacheWriterCoverage | pkg/cleanup/kubeidentity/cache_coverage_test.go::TestCacheCoverageRejectsRollingWritersAndDetachedBuilds | | rainbond.cleanup.cache-writer-native-gate | Recheck live writer coverage before native deletion grant | active | integration | POST node/enter-job | api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce | | rainbond.cleanup.configured-node-helper-references | Protect configured executor images across API rollout and rollback | active | regression | kubeidentity.ReadAPIHelperReferences | pkg/cleanup/reference_audit_test.go::TestConfiguredHelperImagesRemainProtectedWithoutRunningPods
pkg/cleanup/kubeidentity/helper_references_test.go::TestAPIHelperReferencesIncludeDesiredRollbackAndRunningImages
pkg/cleanup/kubeidentity/helper_references_test.go::TestAPIHelperDoesNotReadSecretBackedEnvironment | | rainbond.cleanup.console-signed-coordinator | Use installation-scoped signatures for coordinator requests | active | regression | cleanup.NewConsoleCoordinationClient | pkg/cleanup/console_coordination_test.go::TestConsoleCoordinationUsesScopedSignatureWithoutAdminCredential
pkg/cleanup/console_coordination_test.go::TestConsoleCoordinationRejectsUnsafeScopePathsAndDoesNotRetry | | rainbond.cleanup.console-signed-coordinator-runtime | Run signed coordinator with an independent permit key | active | regression | registry-coordinator.run | cmd/registry-coordinator/main_test.go::TestCoordinatorUsesSignedConsoleAndIndependentPermitKey
cmd/registry-coordinator/main_test.go::TestSignedCoordinatorRejectsSharedOrMissingPermitKey | | rainbond.cleanup.console-signed-gc-command | Authenticate original GC callbacks with installation signatures | active | regression | registry-gc.runGC | cmd/registry-gc/main_test.go::TestGCCommandUsesInstallationSignatureForOriginalReceipt | | rainbond.cleanup.console-writer-announcement | Authenticate Console announcements and bind observed runtime identity | active | regression | CleanupCoordinationHandler.RegisterConsoleReferenceWriter | api/controller/cleanup_reference_writer_test.go::TestConsoleWriterAnnouncementRequiresAuthenticationAndObservedIdentity | | rainbond.cleanup.coordinated-registry-delete-gc | Verify coordinated deletion and separate GC against isolated real Registry | active | integration | Region coordination API and Registry sidecar | api/controller/cleanup_registryproxy_test.go::TestCoordinatedRegistryRealDeletionAndGC | | rainbond.cleanup.coordination-route-auth | Require Region authentication for every coordination route | active | regression | /v2/cleanup/stores/{storage_id}/operations | api/api_routers/version2/cleanup_coordination_test.go::TestCleanupCoordinationRoutesAlwaysRequireRegionAuthentication | | rainbond.cleanup.coordinator-runtime | Run verified readiness and terminate the coordinator cleanly | active | regression | cmd/registry-coordinator.run | cmd/registry-coordinator/main_test.go::TestCoordinatorRunsReadinessAndStopsWithContext | | rainbond.cleanup.deferred-helmapp-references | Require settled HelmApp intent covered by retained release evidence | active | regression | kubeidentity.ReadHelmAppReferenceInventory | pkg/cleanup/kubeidentity/helmapp_references_test.go::TestHelmAppReferencesRequireSettledRelease | | rainbond.cleanup.durable-coordination | Persist coordinated operations across restarts and conflicts | active | regression | pkg/cleanup.AcquireOperation | pkg/cleanup/coordination_test.go::TestPersistentCoordinationConflictsAndRecovery | | rainbond.cleanup.durable-gc-receipt | Recover only immutable GC execution evidence without replay | active | regression | registryproxy.RecoverGCReceipt | pkg/cleanup/registryproxy/gc_receipt_test.go::TestGCReceiptIsBoundImmutableAndDoesNotPermitReplay | | rainbond.cleanup.durable-maintenance-measurements | Persist GC measurements without releasing maintenance protection | active | regression | cleanup.RecordMaintenanceMeasurement | pkg/cleanup/maintenance_measurement_test.go::TestMaintenanceMeasurementsPersistWithoutGrantingRestore | | rainbond.cleanup.executor-preview-authority | Reject admission changes to native executor authority | active | regression | cleanup.sameExecutorPreview | pkg/cleanup/node_job_submit_test.go::TestNodeDryRunCannotChangeExecutorIdentity
pkg/cleanup/gc_job_submit_test.go::TestGCPreviewCannotInjectLifecycleOrStorage | | rainbond.cleanup.expired-upload-reinitialize | Start a new session instead of resuming expired chunk metadata | active | regression | controller.ChunkUploadManager.InitUploadSession | api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadStartsNewSessionInsteadOfResumingRemovedChunks | | rainbond.cleanup.expired-upload-retirement | Retire original expired upload before one-shot chunk deletion and retain recovery evidence | active | regression | DeleteExpiredUploadChunks | pkg/cleanup/upload_retirement_test.go::TestExpiredUploadDeletionRetiresSessionAndDoesNotReplay
pkg/cleanup/upload_retirement_test.go::TestExpiredUploadDeletionRejectsChangedOrActiveEvidence
pkg/cleanup/upload_retirement_test.go::TestInterruptedUploadRetirementDoesNotReplayAfterRestart | | rainbond.cleanup.expired-upload-writes | Reject writes and completion on expired upload sessions | active | regression | controller.ChunkUploadManager.SaveChunk | api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadCannotContinueWriting | | rainbond.cleanup.gc-executor-command | Bind native GC command to the verified Job admission | active | regression | registry-gc.runGC | cmd/registry-gc/main_test.go::TestGCCommandValidatesBeforeExecutionAndSeparatesRecovery | | rainbond.cleanup.gc-executor-identity | Verify GC pod ownership image and physical volume | active | regression | kubeidentity.InspectGCExecutor | pkg/cleanup/kubeidentity/gc_executor_test.go::TestGCExecutorIdentityRejectsUntrustedPodAndStorage | | rainbond.cleanup.gc-executor-termination | Require actual original GC container termination and unchanged source | active | regression | kubeidentity.InspectTerminatedGCExecutor | pkg/cleanup/kubeidentity/gc_executor_test.go::TestTerminatedGCExecutorRequiresActualOriginalContainerExit
pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCSourceFingerprintDetectsRuntimeAndConfigurationChanges | | rainbond.cleanup.gc-failed-before-admission | Cancel failed GC only before execution admission | active | integration | POST maintenance/job/cancel-failed | api/controller/cleanup_gc_failed_test.go::TestFailedGCBeforeAdmissionCanEndMaintenanceWithoutDeletion | | rainbond.cleanup.gc-job-execution-api | Grant verified GC Job execution once after writer drain | active | integration | POST maintenance/enter-job | api/controller/cleanup_gc_executor_test.go::TestGCJobAdmissionAPIRequiresVerifiedExecutorAndGrantsOnce
pkg/cleanup/registryproxy/gc_recorder_test.go::TestGCJobRecorderUsesVerifiedGateWithoutFallback | | rainbond.cleanup.gc-job-progress | Expose only the bound GC operation receipt | active | regression | cleanup.ReadGCJobProgress | pkg/cleanup/gc_job_restore_test.go::TestGCProgressRejectsAnotherOperationIdentity | | rainbond.cleanup.gc-job-restore | Restore only the original verified GC operation with durable measurements | active | integration | cleanup.FinishGCJobRestore | pkg/cleanup/gc_job_restore_test.go::TestGCJobRestoreRequiresOriginalBindingAndMeasurements
api/controller/cleanup_gc_executor_test.go::TestGCJobAdmissionAPIRequiresVerifiedExecutorAndGrantsOnce | | rainbond.cleanup.gc-job-start | Start the recorded GC Job only after writer drain | active | regression | cleanup.StartGCJob | pkg/cleanup/gc_job_start_test.go::TestGCJobStartWaitsForWritersAndNeverReplaysLostStart
pkg/cleanup/gc_job_start_test.go::TestGCJobStartRejectsCanceledOperation | | rainbond.cleanup.gc-job-submission | Persist GC submission and reconcile without replay | active | regression | cleanup.SubmitSuspendedGCJob | pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionPersistsBeforeCreateAndReconcilesLostResponse
pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionRejectsUnsafeRetrySettings
pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionDefaultingAndMutation
pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionCanceledAndDryRunFailureLeaveNoIntent | | rainbond.cleanup.gc-job-template | Derive GC Job from verified Registry storage and credential references | active | regression | kubeidentity.BuildRegistryGCJob | pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobTemplateUsesObservedStorageAndMountedCredentials
pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobTemplateRejectsUnsafeSource | | rainbond.cleanup.gc-reject-legacy-cleaner | Reject GC while legacy automatic cleanup is enabled | active | regression | BuildRegistryGCJob | pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobRejectsLegacyAutomaticCleanup
pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCSourceTracksCleanerProcessButNotStatusHeartbeat | | rainbond.cleanup.generic-activation-fence | Reject generic activation of retired version records | active | regression | cleanup.TrackServiceActivation | pkg/cleanup/store_test.go::TestActivationCannotRestoreRetiredTargetThroughGenericSave | | rainbond.cleanup.helm-native-mutation-admission | Coordinate native Helm mutations and track actual Kubernetes write outcomes | active | integration | helm.runCoordinatedMutation | pkg/helm/cleanup_mutation_test.go::TestHelmMutationRequiresDurableProducerAdmission
pkg/helm/cleanup_transport_test.go::TestHelmTracksActualReleaseStorageWrites
pkg/helm/cleanup_transport_test.go::TestHelmTransportKeepsUncertainWritesAndRejectsUnguardedWrites | | rainbond.cleanup.helm-release-identity | Keep bounded Helm release identity private to reference correlation | active | regression | cleanup.InspectHelmReleaseReferences | pkg/cleanup/helm_release_identity_test.go::TestHelmReleaseIdentityDoesNotExposeChartConfiguration | | rainbond.cleanup.helm-release-values-proof | Match desired Helm overrides to actual release config digests | active | regression | cleanup.HelmReleaseMatchesOverrides | pkg/cleanup/helm_release_identity_test.go::TestHelmReleaseOverridesRequireActualConfig | | rainbond.cleanup.helm-retained-reference-inventory | Protect retained Helm manifests and hooks without exposing Secret contents | active | integration | cleanup.InspectHelmReleaseReferences | pkg/cleanup/helm_references_test.go::TestHelmRetainedManifestAndHooksProvideReferencesOnly
pkg/cleanup/helm_references_test.go::TestHelmCorruptForeignAndUnknownReleasesAreNotEmptySuccess
pkg/cleanup/helm_references_test.go::TestHelmReferenceDecompressionIsBounded
pkg/cleanup/kubeidentity/helm_references_test.go::TestHelmInventoryReadsOnlyReleaseDataIncludingUnlabelledHistory | | rainbond.cleanup.helmapp-mutation-admission | Protect HelmApp create update and install intents during cleanup | active | regression | ApplicationAction.CreateApp | api/handler/cleanup_helmapp_test.go::TestHelmAppMutationsHoldCleanupAdmission | | rainbond.cleanup.import_reference_handoff | Atomically hand import references to successful versions | active | regression | TransferImportedReferencesToVersions | pkg/cleanup/reference_handoff_test.go::TestImportHandoffWaitsForEverySuccessfulVersionAndRollsBack | | rainbond.cleanup.managed-cache-binding | Bind managed cache enrollment to observed system storage | active | integration | POST /v2/cleanup/managed-cache/prepare | pkg/cleanup/kubeidentity/managed_cache_test.go::TestManagedCachePreparationUsesActualNodeAndVolume
api/controller/cleanup_coordination_test.go::TestManagedCachePreparationDerivesIdentityAndNeverPromotesReady | | rainbond.cleanup.managed-package-binding | Managed package roots bind to observed grdata storage | active | regression | kubeidentity.InspectManagedPackageSource | pkg/cleanup/kubeidentity/managed_cache_test.go::TestManagedPackagePreparationUsesActualGrdataVolume
pkg/cleanup/registration_test.go::TestManagedPackageRegistrationsAreFixedDistinctAndNeverReady | | rainbond.cleanup.manual-gc-maintenance | Drain writes and require confirmed restoration around manual GC | active | regression | pkg/cleanup.RequestMaintenance | pkg/cleanup/maintenance_test.go::TestMaintenanceDrainsWritersAndRestoresOnlyAfterConfirmation | | rainbond.cleanup.market-slug-task-completion | Market slug task waits for completion before returning | active | regression | exectorManager.buildFromMarketSlug | builder/exector/cleanup_task_boundary_test.go::TestMarketSlugTaskWaitsForCompletion | | rainbond.cleanup.native-image-build-admission | Image builds hold durable cleanup admission through completion | active | regression | exectorManager.buildFromImage | builder/exector/cleanup_image_admission_test.go::TestImageBuildAdmissionBlocksGCAndNeverReplays | | rainbond.cleanup.native-queue-reservation | Persist native builder task identity before queue delivery | active | regression | mqClient.SendBuilderTopic | mq/client/cleanup_queue_test.go::TestNativeMQTaskReservesStableIdentityBeforeNetwork
mq/client/cleanup_queue_test.go::TestNonNativeMQMessagesKeepExistingDelivery | | rainbond.cleanup.native-service-mesh-references | Classify only native ServiceMesh reference schemas | active | regression | cleanup.inspectWorkloadObject | pkg/cleanup/reference_service_mesh_test.go::TestSavedServiceMeshRequiresKnownNativeProvider | | rainbond.cleanup.node-cancel-before-grant | Cancel only node operations without a native grant | active | regression | cleanup.CancelNodeBeforeGrant | pkg/cleanup/node_cancel_test.go::TestNodeCancellationCannotOverrideNativeAdmission
api/controller/cleanup_node_launch_test.go::TestNodeLaunchAPIRechecksSourceBeforeStarting | | rainbond.cleanup.node-candidate-readiness | Require idle coordinated storage before showing cache candidates | active | regression | cleanup.InspectManagedCacheReadiness | pkg/cleanup/node_readiness_test.go::TestNodeReadinessDoesNotIgnoreActiveOperations | | rainbond.cleanup.node-executor-admission | Admit exactly one observed node executor and verify its termination | active | integration | POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/enter-job | pkg/cleanup/node_execution_test.go::TestNodeExecutorAdmissionIsBoundAndSingleUse
pkg/cleanup/kubeidentity/node_executor_test.go::TestNodeExecutorRequiresOriginalRuntimeNodeAndMount
api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce | | rainbond.cleanup.node-inventory-api | Authenticated manual inventory preserves deletion protection | active | integration | POST /v2/cleanup/managed-cache/inventory | api/controller/cleanup_node_inventory_test.go::TestInventoryAPIStartsReadOnlyJobWithoutDeletionReadiness | | rainbond.cleanup.node-inventory-report | Return inventory only from the original verified successful pod | active | regression | kubeidentity.ReadNodeInventoryReport | pkg/cleanup/kubeidentity/node_inventory_report_test.go::TestInventoryReportRequiresOriginalSuccessfulPod | | rainbond.cleanup.node-inventory-submission | Retry manual inventory without duplicating an existing job | active | regression | cleanup.RunNodeInventoryJob | pkg/cleanup/node_inventory_submit_test.go::TestInventoryRequestReusesJobAfterLostCreate | | rainbond.cleanup.node-inventory-template | Read-only cache inventory binds observed storage | active | regression | kubeidentity.BuildManagedCacheInventoryJob | pkg/cleanup/kubeidentity/node_inventory_template_test.go::TestCacheInventoryTemplateUsesObservedReadOnlyStorage | | rainbond.cleanup.node-job-intent | Persist immutable node execution identity before job creation | active | integration | PrepareNodeJob | pkg/cleanup/node_job_test.go::TestNodeJobIntentIsImmutableAndDoesNotGrantRecreation | | rainbond.cleanup.node-job-launch-api | Launch only the original verified node cleanup job | active | regression | POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/submit-job | api/controller/cleanup_node_launch_test.go::TestNodeLaunchAPIRechecksSourceBeforeStarting | | rainbond.cleanup.node-job-start | Start only the original protected node cleanup Job | active | integration | StartNodeJob | pkg/cleanup/node_job_start_test.go::TestNodeJobStartChecksProtectionAndReconcilesLostReply | | rainbond.cleanup.node-job-submission | Submit one suspended node cleanup Job and reconcile original identity | active | integration | SubmitSuspendedNodeJob | pkg/cleanup/node_job_submit_test.go::TestNodeSubmissionReconcilesLostCreateWithoutRecreating | | rainbond.cleanup.node-job-template | Bind node cleanup jobs to observed cache and persistent state | active | regression | kubeidentity.BuildManagedNodeJob | pkg/cleanup/kubeidentity/node_job_template_test.go::TestNodeJobTemplateBindsCacheAndDurableState | | rainbond.cleanup.node-journal-identity | Bind original node execution journal to PVC and PV identities | active | regression | kubeidentity.InspectNodeJournalVolume | pkg/cleanup/kubeidentity/node_job_template_test.go::TestNodeJobTemplateBindsCacheAndDurableState | | rainbond.cleanup.node-recovery-api | Recover original node receipt after verified executor exit | active | integration | POST node/recover | api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce | | rainbond.cleanup.node-recovery-binding | Persist recovery intent without changing original native authority | active | regression | cleanup.PrepareNodeRecovery | pkg/cleanup/node_recovery_test.go::TestNodeRecoveryIntentIsDurableAndCannotReplaceOriginal | | rainbond.cleanup.node-recovery-submission | Reconcile original recovery Job after lost create response | active | regression | cleanup.SubmitSuspendedNodeRecovery | pkg/cleanup/node_recovery_test.go::TestRecoverySubmissionNeverRecreatesAfterLostResponse | | rainbond.cleanup.node-recovery-template | Build receipt recovery without cache access after verified executor exit | active | regression | kubeidentity.BuildNodeRecoveryJob | pkg/cleanup/kubeidentity/node_recovery_template_test.go::TestNodeRecoveryRequiresOriginalExitAndOmitsCacheVolume | | rainbond.cleanup.node-result-finalization | Finalize known original node results only after verified executor exit | active | integration | POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/finish | pkg/cleanup/node_result_test.go::TestNodeResultIsImmutableAndRequiresExitedOriginalExecutor
pkg/cleanup/node_result_test.go::TestNodeResultRejectsInvalidFilesystemEvidence
api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce | | rainbond.cleanup.package-check-before-enqueue | Reserve package source checks before sending MQ messages | active | regression | ServiceAction.ServiceCheck | api/handler/cleanup_queued_tar_test.go::TestServiceCheckReservesOnlyUploadedPackageSources | | rainbond.cleanup.package-check-queue-classification | Classify native package checks consistently before enqueue and execution | active | regression | PackageCheckIdentity | pkg/cleanup/queued_check_test.go::TestPackageChecksUseSharedQueueClassification | | rainbond.cleanup.package-inventory-mount | Observe and bind read-only package inventory subtree independently of cache deletion | active | regression | BuildManagedCacheInventoryJob | pkg/cleanup/kubeidentity/package_inventory_template_test.go::TestPackageInventoryUsesObservedReadOnlySubtree | | rainbond.cleanup.package-upload-exclusive-close | Drain concurrent upload parts before terminal mutation and preserve uncertain requests | active | regression | AcquirePackageUploadRequest | pkg/cleanup/package_upload_use_test.go::TestPackageUploadCloseDrainsPartsAndRetainsUnknownAcrossRestart
pkg/cleanup/package_upload_use_test.go::TestPackageUploadAdmissionChecksFreshSessionAndOriginalRequest
api/controller/cleanup_upload_use_test.go::TestNativeUploadCancelCannotOverlapAnActivePart | | rainbond.cleanup.package-writer-coverage | Managed package coverage rejects active builds | active | regression | kubeidentity.InspectManagedPackageWriterCoverage | pkg/cleanup/kubeidentity/package_coverage_test.go::TestManagedPackageCoverageRejectsBuildsAndChangingRollout | | rainbond.cleanup.package-writer-readiness | Managed package deletion requires current coordinated writers | active | regression | cleanup.CertifyManagedPackageWriters | pkg/cleanup/package_certification_test.go::TestManagedPackageReadinessRequiresCurrentWritersAndNoUnfinishedUse | | rainbond.cleanup.participant-replacement | Participant replacement preserves active deletion protection | active | regression | cleanup.RegisterParticipant | pkg/cleanup/participant_test.go::TestParticipantReplacementWithdrawsReadinessWithoutLosingDeletion | | rainbond.cleanup.pending-import-references | Include retained tar import and check receipts in reference audits | active | regression | cleanup.collectRegionReferenceImages | pkg/cleanup/reference_import_test.go::TestImportedImagesRemainReferencedUntilTheirRecordsAreReleased
pkg/cleanup/reference_import_test.go::TestIncompleteImportRecordsCannotProveAbsence
pkg/cleanup/reference_import_test.go::TestRejectedAndNonImageChecksDoNotInventReferences | | rainbond.cleanup.platform-future-helper-references | Protect default and configured builder and worker helper images | active | regression | kubeidentity.ReadPlatformHelperReferences | pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestPlatformDefaultsRemainReferencedWithoutActiveBuilds
pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestPlatformHelperOverridesNeverExposeOtherEnvironmentValues
pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestBuilderDaemonSetRollbackHelperReferences | | rainbond.cleanup.platform-resource-admission | Protect namespace and cluster resource mutations from concurrent cleanup | active | regression | NsResourceHandler.CreateNsResource | api/handler/cleanup_namespace_admission_test.go::TestNamespaceMutationsCannotBypassCleanupAdmission
api/handler/cleanup_namespace_admission_test.go::TestClusterMutationsCannotBypassCleanupAdmission | | rainbond.cleanup.plugin-version-reference-coordination | Plugin version writes respect selected deletion and cannot resurrect records | active | regression | PluginBuildVersionDaoImpl | db/mysql/dao/version_cleanup_test.go::TestPluginVersionWritesRespectDeletionAndNeverResurrect | | rainbond.cleanup.queued-producer-handoff | Protect queued producer lifetime and atomically claim once | active | regression | QueueOperation | pkg/cleanup/queued_operation_test.go::TestQueuedProducerProtectsWaitingWorkAndClaimsExactlyOnce | | rainbond.cleanup.queued-tar-consumer | Claim original queued tar reservation before native execution | active | regression | admitBuild | builder/exector/cleanup_image_admission_test.go::TestTarConsumerClaimsOriginalQueueReservation | | rainbond.cleanup.reference-writer-controller-coverage | Require complete stable platform writer controller coverage | active | regression | kubeidentity.InspectReferenceWriterCoverage | pkg/cleanup/kubeidentity/reference_writer_coverage_test.go::TestReferenceWriterCoverageRejectsIncompleteRollout | | rainbond.cleanup.reference-writer-runtime-evidence | Bind reference-writer protocol evidence to immutable running containers | active | regression | cleanup.RegisterReferenceWriter | pkg/cleanup/reference_writer_test.go::TestReferenceWriterEvidenceIsIndependentAndImmutable
pkg/cleanup/kubeidentity/reference_writer_test.go::TestReferenceWriterIdentityUsesActualRuntime | | rainbond.cleanup.reference-writer-startup | Register reference writer runtime evidence at service startup | active | regression | kubeidentity.RegisterReferenceWriterStartup | pkg/cleanup/kubeidentity/reference_writer_startup_test.go::TestReferenceWriterStartupWaitsForOwnRuntimeOnly | | rainbond.cleanup.registered-storage-discovery | Storage discovery rejects incomplete enrollment | active | regression | cleanup.DiscoverStores | pkg/cleanup/discovery_test.go::TestDiscoverStoresRejectsIncompleteRegistration | | rainbond.cleanup.registry-audit-writer-coverage | Require current registered platform writers in execution reference audit | active | regression | POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/registry-references | api/controller/cleanup_coordination_test.go::TestRegistryReferenceAuditUsesBoundAuthenticatedOperation | | rainbond.cleanup.registry-certification | Derive registry readiness from runtime evidence and quiescence | active | regression | cleanup.CertifyRegistry | pkg/cleanup/registry_certification_test.go::TestRegistryCertificationRequiresCompleteEvidence | | rainbond.cleanup.registry-delete-permit | Bind registry deletion permits to immutable targets and expiry | active | regression | pkg/cleanup.VerifyRegistryDeletionPermit | pkg/cleanup/deletion_permit_test.go::TestRegistryDeletionPermitBindsOriginalTargetAndExpiry | | rainbond.cleanup.registry-gc-executor | Execute native Registry GC once against a verified storage descriptor | active | integration | registryproxy.ExecuteGC | pkg/cleanup/registryproxy/gc_executor_test.go::TestGCExecutorDoesNotStartWithoutAdmission
api/controller/cleanup_registryproxy_test.go::TestCoordinatedRegistryExecutorRealDeletionAndGC | | rainbond.cleanup.registry-identity-provision | Provision independent platform registry identities without overwrites | active | regression | provision_identity.provision | hack/contrib/docker/registry-gc/provision_identity_test.py | | rainbond.cleanup.registry-ingress-isolation | Reject registry routes that bypass the coordinator | active | regression | pkg/cleanup/kubeidentity.InspectRegistryIngress | pkg/cleanup/kubeidentity/registry_ingress_test.go::TestRegistryIngressRequiresExclusiveCoordinatedRoute | | rainbond.cleanup.registry-kubernetes-binding | Verify actual registry Pod and backing volume identity | active | regression | pkg/cleanup/kubeidentity.InspectRegistryMount | pkg/cleanup/kubeidentity/registry_mount_test.go::TestRegistryMountBindingUsesRealVolumeAndPodIdentity | | rainbond.cleanup.registry-participant-coverage | Verify every selected registry ingress against its runtime enrollment | active | regression | kubeidentity.InspectRegistryParticipantCoverage | pkg/cleanup/kubeidentity/registry_participant_test.go::TestParticipantIdentityComesFromCurrentContainerStatus | | rainbond.cleanup.registry-permit-fresh-coverage | Revalidate current registry coverage before deletion permits | active | regression | POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/registry-permit | api/controller/cleanup_registry_readiness_test.go::TestRegistryPermitRevalidatesCurrentCoverage | | rainbond.cleanup.registry-permit-key-separation | Separate registry permit signing from control authentication | active | regression | controller.systemRegistryPermitKey | api/controller/cleanup_permit_key_test.go::TestRegistryPermitKeyUsesDedicatedFileAndNeverFallsBackOnFailure | | rainbond.cleanup.registry-preparation | Derive registry identity from controlled inspection without granting cleanup | active | regression | /v2/cleanup/registry/prepare | api/controller/cleanup_coordination_test.go::TestRegistryPreparationDerivesIdentityAndNeverPromotesReady | | rainbond.cleanup.registry-reference-bootstrap | Read collecting registry references without granting deletion | active | regression | cleanup.ReadRegionReferenceInventory | pkg/cleanup/reference_audit_test.go::TestReferenceInventoryBootstrapsWithoutGrantingDeletion | | rainbond.cleanup.registry-request-scope | Reject ambiguous Registry paths and direct blob deletion | active | regression | pkg/cleanup/registryproxy.ClassifyRequest | pkg/cleanup/registryproxy/request_test.go::TestRegistryProxyRejectsAmbiguousPathsAndUnselectedDeletion | | rainbond.cleanup.registry-service-coverage | Check every registry service instance without accepting partial coverage | active | regression | pkg/cleanup/kubeidentity.InspectRegistryService | pkg/cleanup/kubeidentity/registry_service_test.go::TestRegistryServiceRejectsMixedAndEmptyDeployments | | rainbond.cleanup.registry-service-stable-membership | Reject registry membership changes during ingress inspection | active | regression | kubeidentity.InspectRegistryService | pkg/cleanup/kubeidentity/registry_service_test.go::TestRegistryServiceRejectsMembershipChangeDuringInspection | | rainbond.cleanup.registry-stream-admission | Require admission before forwarding mutations without credential leakage | active | regression | pkg/cleanup/registryproxy.Proxy.ServeHTTP | pkg/cleanup/registryproxy/proxy_test.go::TestProxyAcquiresBeforeForwardingAndPreservesRegistryAuth | | rainbond.cleanup.registry-upload-lifecycle | Keep upload leases across parts and drain existing sessions safely | active | regression | pkg/cleanup.AcquireUploadRequest | pkg/cleanup/upload_coordination_test.go::TestUploadSessionRemainsProtectedBetweenParts | | rainbond.cleanup.restore-producer-transaction | Keep restore metadata and result publication in admitted transactions | active | integration | BackupAPPRestore.withMetadataWrite | builder/exector/cleanup_restore_admission_test.go::TestRestoreMetadataRetainsAdmissionAndRollsBackFailure | | rainbond.cleanup.saved-workload-reference-coordination | Serialize saved workload reference writes with cleanup admission | active | regression | K8sResourceDaoImpl | db/mysql/dao/k8s_resource_cleanup_test.go::TestSavedWorkloadWritesRespectCleanupAdmission | | rainbond.cleanup.service-mesh-mutation-admission | Protect ServiceMesh mutations until reference persistence is confirmed | active | regression | ApplicationAction.CreateServiceMeshCR | api/handler/cleanup_service_mesh_test.go::TestServiceMeshMutationsHoldCleanupAdmission | | rainbond.cleanup.service_check_import_handoff | Preserve imported image references across component creation | active | regression | CleanServiceCheckData | api/handler/service_check_cleanup_test.go::TestServiceCheckCreationCleanupPreservesImportReferences | | rainbond.cleanup.share-task-completion | Slug sharing remains active until result persistence finishes | active | regression | exectorManager.slugShare | builder/exector/cleanup_task_boundary_test.go::TestSlugShareTaskWaitsForResultPersistence | | rainbond.cleanup.signed-gc-job-template | Project GC identity without exposing permit signing authority | active | regression | kubeidentity.BuildRegistryGCJob | pkg/cleanup/kubeidentity/gc_job_template_test.go::TestSignedGCJobCopiesScopeButNeverPermitSigningSecret | | rainbond.cleanup.single-deletion-attempt | Consume deletion permission once and retain verification protection | active | regression | pkg/cleanup.BeginDeletionAttempt | pkg/cleanup/deletion_attempt_test.go::TestDeletionAttemptIsConsumedOnceAndRemainsProtectedUntilVerified | | rainbond.cleanup.sqlite-activation | Support activation tracking on SQLite | active | regression | cleanup.TrackServiceActivation | pkg/cleanup/activation_sqlite_test.go::TestTrackServiceActivationSupportsSQLite | | rainbond.cleanup.sqlite-version-store | SQLite version selection inspection and retirement | active | regression | pkg/cleanup.SelectRollbackVersion | pkg/cleanup/store_sqlite_test.go::TestVersionStoreSupportsSQLite | | rainbond.cleanup.storage-enrollment | Collect writes during enrollment without granting cleanup | active | regression | pkg/cleanup.RegisterStorage | pkg/cleanup/registration_test.go::TestStorageRegistrationCollectsWritesWithoutEnablingDeletion | | rainbond.cleanup.storage-identity | Bind storage identity atomically without replacing prior markers | active | regression | pkg/cleanup/registryproxy.InitializeStorageIdentity | pkg/cleanup/registryproxy/identity_test.go::TestStorageIdentityIsBoundAndNeverOverwritten | | rainbond.cleanup.tar-admission-before-enqueue | Persist exact tar task reservation before MQ and retain unknown outcome | active | regression | TarImageHandle.LoadTarImage | api/handler/cleanup_queued_tar_test.go::TestTarAPIReservesBeforeEnqueueAndRetainsLostAcknowledgement | | rainbond.cleanup.tar-check-event-path | Restrict tar check input to event directory identifiers | active | regression | parser.TarImageEventID | builder/parser/tar_event_test.go::TestTarImageEventIDRejectsTraversalAndMalformedSources | | rainbond.cleanup.tar-image-admission | Fence tar image import through native work and result persistence | active | regression | exector.loadTarImage | builder/exector/cleanup_tar_admission_test.go::TestTarImportAdmissionCoversWorkAndResultPersistence
builder/exector/cleanup_tar_admission_test.go::TestTarImportUnknownOutcomeRetainsProtection
builder/exector/cleanup_tar_admission_test.go::TestTarImportInvalidIdentityStopsBeforeFilesystemOrDatabase | | rainbond.cleanup.tar-image-entry | Reject tar import before native work and preserve original result | active | regression | exector.loadTarImage | builder/exector/cleanup_tar_admission_test.go::TestTarImportEntryReportsMaintenanceWithoutStartingNativeWork | | rainbond.cleanup.tar-image-redelivery | Do not overwrite a running tar import on duplicate delivery | active | regression | exector.loadTarImage | builder/exector/cleanup_tar_admission_test.go::TestTarImportRedeliveryDoesNotPublishFailureOverActiveWork | | rainbond.cleanup.tar-service-check-admission | Block tar service check native work during maintenance | active | regression | exector.serviceCheck | builder/exector/cleanup_service_check_test.go::TestTarServiceCheckCannotPushDuringMaintenance | | rainbond.cleanup.upload-cancel-evidence | Retain upload session evidence when physical cleanup fails | active | regression | controller.ChunkUploadManager.CancelUpload | api/controller/chunk_upload_cleanup_test.go::TestCancelUploadRetainsRecoveryEvidenceOnFailure | | rainbond.cleanup.upload-completion-evidence | Persist upload completion before deleting resumable chunks | active | regression | ChunkUploadManager.CompleteUpload | api/controller/chunk_upload_completion_test.go::TestUploadCompletionPreservesEvidenceBeforeChunkDeletion | | rainbond.cleanup.upload-delete-api | Gate selected upload chunk deletion on current writers storage identity expiry and scanned session | active | regression | POST /v2/cleanup/uploads/chunks/delete | api/controller/cleanup_upload_delete_test.go::TestUploadDeleteAPIRequiresWriterStorageRuleAndSelectionEvidence | | rainbond.cleanup.upload-expiration-evidence | Preserve unverified expired upload records without expanding background deletion | active | regression | controller.ChunkUploadManager.cleanExpiredSessions | api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadCleanupPreservesRecoveryEvidence | | rainbond.cleanup.upload-inventory-api | Scope manual upload inventory and retain unknown measured sizes | active | regression | POST /v2/cleanup/uploads/inventory | api/controller/cleanup_upload_inventory_test.go::TestUploadInventoryRestrictsEventsAndPreservesUnknownSizes | | rainbond.cleanup.upload-inventory-bounds | Bound upload inventory before physical storage reads | active | regression | POST /v2/cleanup/uploads/inventory | api/controller/cleanup_upload_inventory_test.go::TestUploadInventoryRejectsOversizedResultBeforeReadingStorage | | rainbond.cleanup.upload-retained-references | Protect package events referenced by retained versions and source checks | active | regression | ReadUploadPackageReferences | pkg/cleanup/package_references_test.go::TestUploadReferencesProtectRetainedVersionsAndSourceChecks
pkg/cleanup/package_references_test.go::TestUploadReferencePathsAreCanonical | | rainbond.cleanup.upload-use-lifetime | Keep native upload storage work protected through completion and restart | active | regression | ChunkUploadManager native storage lifecycle | api/controller/cleanup_upload_use_test.go::TestUploadUsePersistsAcrossStorageWorkAndUncertainResults
api/controller/cleanup_upload_use_test.go::TestUploadMaintenanceStopsNativeChunkWriteCancelAndExpiry | | rainbond.cleanup.upload-writer-coverage | Require current API instances to register upload guard support separately from registry references | active | regression | UploadWriterCoverageRegistered | pkg/cleanup/upload_writer_test.go::TestUploadDeletionRequiresEveryCurrentAPIWriterProtocol | | rainbond.cleanup.verified-client-identity | Cleanup requires configured token or verified platform client certificate | active | regression | api.middleware.CleanupIdentity | api/middleware/cleanup_identity_test.go::TestCleanupIdentityRequiresVerifiedClientOrConfiguredToken | | rainbond.cleanup.verified-storage-measurement | Measure only the verified registry backing filesystem | active | regression | registryproxy.MeasureStorage | pkg/cleanup/registryproxy/measurement_test.go::TestMeasurementRequiresBoundStorageAndRejectsSymlinks
cmd/registry-coordinator/main_test.go::TestMeasurementModeDoesNotInitializeOrNeedCredentials | | rainbond.cleanup.version-activation-fence | Fence upgrade and rollback against version retirement | active | regression | OperationHandler.upgrade and ServiceAction.RollBack | api/handler/cleanup_rollback_test.go::TestLegacyRollbackCannotActivateRetiredVersion
api/handler/cleanup_rollback_test.go::TestExplicitUpgradeRechecksVersionUnderRetirementLock
api/handler/cleanup_rollback_test.go::TestUpgradeQueueFailureCannotOverwriteNewerDeployment
api/handler/cleanup_rollback_test.go::TestLegacyRollbackRejectsWrongTenant
api/handler/cleanup_rollback_test.go::TestExplicitUpgradeEnqueuesValidatedVersion | | rainbond.cleanup.version-reference-coordination | Version writes serialize with manifest deletion | active | regression | VersionInfoDaoImpl | db/mysql/dao/version_cleanup_test.go::TestVersionCreationCannotRaceManifestDeletion | | rainbond.cleanup.version-update-no-resurrection | Version callbacks preserve activation and never recreate retired records | active | regression | VersionInfoDaoImpl.UpdateModel | db/mysql/dao/version_cleanup_test.go::TestVersionUpdateNeverRecreatesRetiredRecordsOrResetsActivation | | rainbond.cleanup.vm-activation-dispatch | Do not deploy VM after version activation rejection | active | regression | exectorManager.buildFromVM | builder/exector/cleanup_activation_test.go::TestVMBuildCannotDispatchAfterActivationRejected | | rainbond.cleanup.workload-apply-admission | Keep workload producer admission through Kubernetes mutation and reference commit | active | regression | handler.admitWorkload | api/handler/cleanup_workload_admission_test.go::TestWorkloadAdmissionProtectsExternalApplyThroughCommit
api/handler/cleanup_workload_admission_test.go::TestWorkloadAdmissionRetainsOnlyUnresolvedEffects | | rainbond.cleanup.yaml-apply-admission-integration | Exercise YAML apply protection through HTTP and durable database outcomes | active | integration | clusterAction.AddAppK8SResource | api/handler/cleanup_workload_apply_test.go::TestYAMLApplyAdmissionCoversRequestsAndPartialResults | | rainbond.cloud-storage.alioss-error-map | 将 AliOSS 服务错误转换为统一存储 SDK 错误 | active | regression | builder/cloudos.svcErrToS3SDKError | builder/cloudos/alioss_test.go::TestSvcErrToS3SDKError | | rainbond.cloud-storage.driver-factory | 将云存储配置分发到正确的驱动实现 | active | regression | builder/cloudos.New | builder/cloudos/cloudos_test.go::TestNewDispatchesProviderDrivers | | rainbond.cloud-storage.provider-parse | 解析云存储 provider 配置值 | active | regression | builder/cloudos.Str2S3Provider | builder/cloudos/cloudos_test.go::TestStr2S3Provider | | rainbond.cloud-storage.s3-driver-config | 按预期配置初始化 S3 存储驱动 | active | regression | builder/cloudos.newS3 | builder/cloudos/s3_test.go::TestNewS3DriverKeepsConfig | | rainbond.cluster-resource.detect-subresource | 识别集群资源子路径 | active | regression | api/handler.containsSlash | api/handler/cluster_resource_test.go::TestContainsSlash | | rainbond.cluster-resource.exclude-terminal-pods | 从集群资源分配统计中排除终态 Pod | active | regression | api/handler.(*TenantAction).initClusterResource | api/handler/resource_query_scope_test.go::TestInitClusterResourceExcludesTerminalPods | | rainbond.cluster-resource.handler-singleton | 复用集群资源处理器单例 | active | unit | api/handler.GetClusterResourceHandler | api/handler/cluster_resource_test.go::TestGetClusterResourceHandlerSingleton | | rainbond.cluster-resource.validate-gvr | 校验集群资源 GVR 参数 | active | regression | api/handler.validateGVRParams | api/handler/cluster_resource_test.go::TestValidateGVRParams | | rainbond.cluster.rbd-component-readiness | Rainbond component readiness overview | active | regression | api/handler.clusterAction.ListRainbondComponents | api/handler/cluster_overview_test.go::TestPodReadyForOverview
api/handler/cluster_overview_test.go::TestBuildRainbondComponentOverviewSortsByName
api/handler/cluster_overview_test.go::TestFinalizeRainbondComponentOverviewKeepsZeroPodOperatorSorted
api/handler/cluster_overview_test.go::TestDeduplicateRainbondComponentPodsPreventsOverlappingCounts | | rainbond.cluster.upgrade-preserves-component-config | Preserve custom component configuration during image upgrades | active | regression | POST /v2/cluster/rbd-upgrade | api/controller/cluster_upgrade_test.go::TestUpgradePreservesComponentConfig | | rainbond.cnb-version.extract-major | 从 CNB 版本表达式提取主版本 | active | regression | builder/parser/code.extractMajorFromSpec | builder/parser/code/cnb_versions_test.go::TestExtractMajorFromSpec | | rainbond.cnb-version.golang-order-and-default | 保持 Go CNB 版本顺序并将最新版本设为默认 | active | regression | builder/parser/code.GetCNBVersions | builder/parser/code/cnb_versions_test.go::TestGetCNBVersionsGoOrderingAndDefault | | rainbond.cnb-version.match-golang | 归一化并匹配 Go CNB 版本表达式 | active | regression | builder/parser/code.MatchCNBVersion | builder/parser/code/cnb_versions_test.go::TestMatchCNBVersion_Golang | | rainbond.cnb-version.match-language | 为复合语言匹配 CNB 版本 | active | regression | builder/parser/code.MatchCNBVersion | builder/parser/code/cnb_versions_test.go::TestMatchCNBVersion_CompositeLanguage | | rainbond.cnb-version.python-order-and-default | 保持 Python CNB 版本顺序并将最新版本设为默认 | active | regression | builder/parser/code.GetCNBVersions | builder/parser/code/cnb_versions_test.go::TestGetCNBVersionsPythonOrderingAndDefault | | rainbond.cnb-version.resolve-supported | 按语言解析支持的 CNB 版本 | active | regression | builder/parser/code.GetCNBVersions | builder/parser/code/cnb_versions_test.go::TestGetCNBVersions | | rainbond.cnb.annotation-key-decode | 将 CNB 注解键解码为 BP 环境变量名 | active | regression | builder/build/cnb.annotationKeyToBPEnv | builder/build/cnb/cnb_test.go::TestAnnotationKeyToBPEnv | | rainbond.cnb.annotation-key-encode | 将 BP 环境变量名编码为 CNB 注解键 | active | regression | builder/build/cnb.bpEnvToAnnotationKey | builder/build/cnb/cnb_test.go::TestBpEnvToAnnotationKey | | rainbond.cnb.bp-annotation-priority | 显式 CNB 注解优先于 BP 透传值 | active | regression | builder/build/cnb.Builder.buildPlatformAnnotations | builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsBPNoOverride | | rainbond.cnb.build-job-execution | 执行 CNB 构建任务全流程 | active | regression | builder/build/cnb.Builder.runCNBBuildJob | builder/build/cnb/cnb_test.go::TestRunCNBBuildJob | | rainbond.cnb.builder-image | 解析 CNB builder 镜像 | active | regression | builder/build/cnb.GetCNBBuilderImage | builder/build/cnb/cnb_test.go::TestGetCNBBuilderImage | | rainbond.cnb.config-file | 注入指定的 CNB 配置文件内容 | active | regression | builder/build/cnb.injectConfigFile | builder/build/cnb/cnb_test.go::TestInjectConfigFile | | rainbond.cnb.creator-args | 生成 CNB creator 命令参数 | active | regression | builder/build/cnb.Builder.buildCreatorArgs | builder/build/cnb/cnb_test.go::TestBuildCreatorArgs | | rainbond.cnb.creator-args-insecure-registry | 为 CNB creator 附加 insecure registry 参数 | active | regression | builder/build/cnb.Builder.buildCreatorArgs | builder/build/cnb/cnb_test.go::TestBuildCreatorArgsInsecureRegistry | | rainbond.cnb.dependency-mirror | 解析 CNB 依赖镜像源 | active | regression | builder/build/cnb.getDependencyMirror | builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsMirrorDefault
builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsMirrorExplicit
builder/build/cnb/cnb_test.go::TestGetDependencyMirrorOffline | | rainbond.cnb.env-vars | 生成 CNB 构建任务环境变量 | active | regression | builder/build/cnb.Builder.buildEnvVars | builder/build/cnb/cnb_test.go::TestBuildEnvVars | | rainbond.cnb.mirror-config | 按来源模式注入 CNB 镜像配置 | active | regression | builder/build/cnb.nodejsConfig.InjectMirrorConfig | builder/build/cnb/cnb_test.go::TestInjectMirrorConfig | | rainbond.cnb.mirror-config-write-error | 传播 CNB 镜像配置写入失败 | active | regression | builder/build/cnb.nodejsConfig.InjectMirrorConfig | builder/build/cnb/cnb_test.go::TestInjectMirrorConfigWriteError | | rainbond.cnb.new-builder | 创建 CNB 构建器实例 | active | regression | builder/build/cnb.NewBuilder | builder/build/cnb/cnb_test.go::TestNewBuilder | | rainbond.cnb.npm-cache-policy | Avoid ineffective npm registry caching while retaining image layer reuse | active | regression | builder/build/cnb.Builder.buildCreatorArgs | builder/build/cnb/cache_policy_test.go::TestCNBNPMCachePolicy
builder/build/cnb/cache_policy_test.go::TestCNBCachePolicyExplainsAutomaticBypass
builder/build/cnb/cache_policy_test.go::TestCNBCachePolicyPreservesCacheForUnknownSources | | rainbond.cnb.npm-global-registry | 为全局 npm 安装导出 NPM_CONFIG_REGISTRY | active | regression | builder/build/cnb.resolveNpmRegistry | builder/build/cnb/cnb_test.go::TestResolveNpmRegistry
builder/build/cnb/cnb_test.go::TestNodejsNpmRegistryAnnotation | | rainbond.cnb.npmrc-registry-parse | 从 .npmrc 内容中解析默认 registry 配置项 | active | unit | builder/build/cnb.npmRegistryFromNpmrc | builder/build/cnb/cnb_test.go::TestNpmRegistryFromNpmrc | | rainbond.cnb.offline-mode | 解析离线模式下的 CNB 镜像行为 | active | regression | builder/build/cnb offline mode helpers | builder/build/cnb/cnb_test.go::TestIsOfflineMode
builder/build/cnb/cnb_test.go::TestGetCNBBuilderImageOffline
builder/build/cnb/cnb_test.go::TestGetCNBRunImageOffline | | rainbond.cnb.order-toml | 写入自定义 CNB order 定义 | active | regression | builder/build/cnb.Builder.writeCustomOrder | builder/build/cnb/cnb_test.go::TestWriteCustomOrder | | rainbond.cnb.order-write-failure | CNB order 文件写入失败时返回空标记 | active | regression | builder/build/cnb.Builder.writeCustomOrder | builder/build/cnb/cnb_test.go::TestWriteCustomOrderFailure | | rainbond.cnb.package-workspace-isolation | 隔离源码包 CNB 构建工作目录并保留原始上传内容 | active | regression | builder/build/cnb.Builder.Build | builder/build/cnb/package_workspace_test.go::TestCNBPackageBuildUsesPristineWorkspace
builder/build/cnb/package_workspace_test.go::TestCNBNonPackageBuildKeepsSourceDirectory
builder/parser/package_workspace_test.go::TestPreparePackageBuildWorkspace
builder/parser/package_workspace_test.go::TestPreparePackageBuildWorkspaceRejectsInvalidInput | | rainbond.cnb.phase-timing | Report observed CNB lifecycle phase durations without changing build output | active | regression | builder/build/cnb.Builder.runCNBBuildJob | builder/build/cnb/phase_logger_test.go::TestCNBPhaseTiming
builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingHandlesFragmentedLogs
builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingPreservesWriterErrors
builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingSerializesConcurrentWrites
builder/build/cnb/phase_logger_test.go::TestCNBJobEmitsFinalPhaseTiming | | rainbond.cnb.platform-annotations | 根据构建环境生成 CNB 平台注解 | active | regression | builder/build/cnb.Builder.buildPlatformAnnotations | builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotations | | rainbond.cnb.platform-volume | 根据注解创建 CNB 平台卷 | active | regression | builder/build/cnb.Builder.createPlatformVolume | builder/build/cnb/cnb_test.go::TestCreatePlatformVolume
builder/build/cnb/cnb_test.go::TestCreatePlatformVolumeEmpty
builder/build/cnb/cnb_test.go::TestCreatePlatformVolumeNonCNBKeys | | rainbond.cnb.prebuild-job-cleanup | 清理历史 CNB 预构建任务 | active | regression | builder/build/cnb.Builder.stopPreBuildJob | builder/build/cnb/cnb_test.go::TestStopPreBuildJob | | rainbond.cnb.project-file-validation | CNB 构建前校验项目文件 | active | regression | builder/build/cnb.Builder.validateProjectFiles | builder/build/cnb/cnb_test.go::TestValidateProjectFiles | | rainbond.cnb.run-image | 解析 CNB run 镜像 | active | regression | builder/build/cnb.GetCNBRunImage | builder/build/cnb/cnb_test.go::TestGetCNBRunImage | | rainbond.cnb.source-dir-permissions | CNB 构建前规范化源码目录权限 | active | regression | builder/build/cnb.Builder.setSourceDirPermissions | builder/build/cnb/cnb_test.go::TestSetSourceDirPermissions
builder/build/cnb/cnb_test.go::TestSetSourceDirPermissionsNonexistent | | rainbond.cnb.static-buildpacks | 纯静态源码使用 nginx buildpack | active | regression | builder/build/cnb.staticConfig.CustomOrder | builder/build/cnb/cnb_test.go::TestStaticBuildpacks | | rainbond.cnb.volume-mounts | 创建 CNB 构建卷与挂载 | active | regression | builder/build/cnb.Builder.createVolumeAndMount | builder/build/cnb/cnb_test.go::TestCreateVolumeAndMount | | rainbond.cnb.waiting-complete | 等待 CNB 构建任务完成状态 | active | regression | builder/build/cnb.Builder.waitingComplete | builder/build/cnb/cnb_test.go::TestWaitingComplete | | rainbond.component.volume-delete-blocks-shared-mount | Block deleting shared mounted component volumes | active | regression | api/handler.ServiceAction.VolumnVar | api/handler/service_volume_test.go::TestServiceActionVolumnVarDeleteRejectsSharedMountedVolume | | rainbond.component.volume-expansion-only-grows | Reject PVC volume shrink requests | active | regression | api/handler.ServiceAction.UpdVolume | api/handler/service_volume_test.go::TestServiceActionUpdVolumeRejectsShrink | | rainbond.component.volume-expansion-reconciles-drift | Reconcile PVC request with stored volume capacity | active | regression | api/handler.ServiceAction.UpdVolume | api/handler/service_volume_test.go::TestServiceActionUpdVolumeReconcilesStoredCapacity | | rainbond.component.volume-expansion-status | Report PVC volume expansion capability and status | active | unit | api/handler.ServiceAction.GetVolumes | api/handler/service_volume_expansion_test.go::TestInspectVolumeExpansion | | rainbond.component.volume-expansion-updates-claims | Expand every PVC for a component volume | active | regression | api/handler.ServiceAction.UpdVolume | api/handler/service_volume_expansion_test.go::TestExpandVolumeClaims | | rainbond.component.volume-path-update-without-expansion | Path edits with unchanged capacity do not require PVC expansion support | active | regression | ServiceAction.UpdVolume | api/handler/service_volume_test.go::TestServiceActionUpdVolumePathDoesNotRequireExpansion | | rainbond.component.volume-update-persists-capacity | 持久化组件存储容量更新 | active | regression | api/handler.ServiceAction.UpdVolume | api/handler/service_volume_test.go::TestServiceActionUpdVolumeUpdatesVolumeCapacity | | rainbond.component.volume-update-preserves-capacity | 组件存储更新请求保留容量字段 | active | regression | api/model.UpdVolumeReq | api/model/volume_test.go::TestUpdVolumeReqPreservesVolumeCapacityFromJSON | | rainbond.compose.config-volume-file-content | 保留配置卷文件内容字段语义 | active | regression | builder/parser/types.Volume.FileContent | builder/parser/file_content_test.go::TestVolumeFileContent | | rainbond.compose.config-volume-path-mode | Docker Compose config volumes keep container path and mode | active | regression | builder/parser.DockerComposeParse.Parse | builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseConfigVolumeUsesContainerPathAndMode | | rainbond.compose.detect-config-file-mount | 识别配置文件类型的挂载路径 | active | regression | builder/parser/compose.isConfigFile | builder/parser/compose/version_detect_test.go::TestIsConfigFile | | rainbond.compose.detect-version | 根据语法特征推断 compose 版本 | active | regression | builder/parser/compose.inferComposeVersion | builder/parser/compose/version_detect_test.go::TestInferComposeVersion | | rainbond.compose.missing-file-bind-warning | Warn when missing bind mount looks like a file | active | regression | builder/parser.DockerComposeParse.Parse | builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWarnsMissingFileLikeBindMount | | rainbond.compose.parse-warnings | 解析 docker compose 并返回降级告警 | active | regression | builder/parser.CreateDockerComposeParse.Parse | builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWithWarnings | | rainbond.compose.preserve-volume-source-path | Preserve docker compose volume source paths | active | regression | builder/parser/compose.loadV3Volumes | builder/parser/compose/version_detect_test.go::TestLoadV3VolumesPreservesSourcePathUnderscores | | rainbond.compose.yaml-anchor-support | 支持 docker compose 中的 YAML anchors | active | regression | builder/parser.CreateDockerComposeParse.Parse | builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWithYAMLAnchors | | rainbond.config-file.dependent-configmap-ownership | 依赖配置文件保持提供方所有权 | active | regression | worker/appm/volume.ConfigFileVolume.CreateDependVolume | worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeUsesProviderConfigMap
worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForVMUsesProviderIdentity
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapLeavesExistingDependencyConfigMapToProvider
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapCreatesMissingDependencyConfigMapForProvider
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapDoesNotDeleteProviderDependency
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapReclaimsLegacyProviderConfigMap
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapDoesNotAdoptForeignCollision | | rainbond.config-file.dependent-source-key | 依赖配置文件使用提供方源文件键 | active | regression | worker/appm/volume.ConfigFileVolume.CreateDependVolume | worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeUsesProviderFileKey
worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForVMUsesProviderFileKey
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapMigratesOnlyLegacyDependentSourceKey
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapMigratesOnlyKnownLegacyConsumerConfigMap
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapRetriesDependentMigrationConflict
worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapHandlesDependentCreateRace | | rainbond.config-file.k8s-volume-name-safe | Keep config-file Kubernetes volume names DNS-safe | active | regression | worker/appm/volume.ConfigFileVolume.CreateVolume | worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateVolumeForDeploymentUsesK8sSafeVolumeName
worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForDeploymentUsesK8sSafeVolumeName | | rainbond.config-files.detect | 识别源码目录中的 npm 和 yarn 配置文件 | active | regression | builder/parser/code.DetectConfigFiles | builder/parser/code/config_files_test.go::TestDetectConfigFiles_Npmrc
builder/parser/code/config_files_test.go::TestDetectConfigFiles_YarnrcClassic
builder/parser/code/config_files_test.go::TestDetectConfigFiles_YarnrcYml
builder/parser/code/config_files_test.go::TestDetectConfigFiles_Multiple
builder/parser/code/config_files_test.go::TestDetectConfigFiles_None | | rainbond.config-files.has-any | 检测源码中是否存在包管理器配置文件 | active | regression | builder/parser/code.ConfigFiles.HasAnyConfigFile | builder/parser/code/config_files_test.go::TestConfigFiles_HasAnyConfigFile | | rainbond.config-files.read-npmrc | 读取源码中的 npmrc 内容 | active | regression | builder/parser/code.ConfigFiles.GetNpmrcContent | builder/parser/code/config_files_test.go::TestConfigFiles_GetNpmrcContent | | rainbond.config-files.read-yarnrc | 读取源码中的 yarnrc 内容 | active | regression | builder/parser/code.ConfigFiles.GetYarnrcContent | builder/parser/code/config_files_test.go::TestConfigFiles_GetYarnrcContent | | rainbond.config-files.resolve-relevant-file | 为包管理器选择相关配置文件 | active | regression | builder/parser/code.ConfigFiles.GetRelevantConfigFile | builder/parser/code/config_files_test.go::TestConfigFiles_GetRelevantConfigFile | | rainbond.dockerfile-build.proxy-env-inheritance | Dockerfile BuildKit proxy environment inheritance | active | regression | builder/build.buildKitProxyEnvVars | builder/build/dockerfile_build_test.go::TestBuildKitProxyEnvVars | | rainbond.dockerfile-build.registry-mirror-toml | Render BuildKit TOML with optional registry mirrors | active | regression | builder/sources.buildKitTomlContent | builder/sources/buildkit_toml_test.go::TestBuildKitTomlContent
builder/sources/buildkit_toml_test.go::TestBuildKitTomlContentLegacyEquivalence | | rainbond.dockerfile.line-info | 跟踪 Dockerfile AST 的行号信息 | active | regression | util/dockerfile/parser.Parse | util/dockerfile/parser/parser_test.go::TestLineInformation | | rainbond.dockerfile.parse-fixtures | 将标准 Dockerfile 示例解析为稳定 AST | active | regression | util/dockerfile/parser.Parse | util/dockerfile/parser/parser_test.go::TestTestData | | rainbond.dockerfile.parse-json-array | 解析 Dockerfile 指令中的 JSON 数组语法 | active | regression | util/dockerfile/parser.parseJSON | util/dockerfile/parser/json_test.go::TestJSONArraysOfStrings | | rainbond.dockerfile.parse-words | 按引号与转义规则拆分 Dockerfile 指令参数 | active | regression | util/dockerfile/parser.parseWords | util/dockerfile/parser/parser_test.go::TestParseWords | | rainbond.dockerfile.reject-invalid | 解析 Dockerfile 时拒绝无效示例 | active | regression | util/dockerfile/parser.Parse | util/dockerfile/parser/parser_test.go::TestTestNegative | | rainbond.endpoint.address-split | 从协议与端口中拆分端点地址 | active | regression | util/endpoint.SplitEndpointAddress | util/endpoint/validation_test.go::TestSplitEndpointAddress | | rainbond.endpoint.domain-not-ip | 判断端点地址应按域名而不是 IP 处理 | active | regression | util/endpoint.IsDomainNotIP | util/endpoint/validation_test.go::TestIsDomainNotIP | | rainbond.endpoint.domain-validate | 校验端点域名及通配域名 | active | regression | util/endpoint.ValidateDomain | util/endpoint/validation_test.go::TestValidateDomain | | rainbond.endpoint.ip-validate | 校验端点 IP 地址并拒绝受限网段 | active | regression | util/endpoint.ValidateEndpointIP | util/endpoint/validation_test.go::TestValidateEndpointIP | | rainbond.env-var.noop-update | Treat no-op component env updates as success | active | regression | db.mysql.dao.TenantServiceEnvVarDaoImpl.UpdateModelByAttrName | db/mysql/dao/tenant_service_env_var_test.go::TestTenantServiceEnvVarDaoUpdateModelByAttrNameNoopSucceeds | | rainbond.envutil.custom-memory | 判断内存大小是自定义值还是预设值 | active | regression | util/envutil.IsCustomMemory | util/envutil/envutil_test.go::TestIsCustomMemory | | rainbond.envutil.getenv-default | 在 envutil 中为缺失环境变量返回默认值 | active | regression | util/envutil.GetenvDefault | util/envutil/envutil_test.go::TestGetenvDefault | | rainbond.envutil.memory-label | 将内存大小映射为预设内存标签 | active | regression | util/envutil.GetMemoryType | util/envutil/envutil_test.go::TestGetMemoryType | | rainbond.event-log.require-log-identity | Reject log list requests without a component identity | active | regression | GET /v2/cluster/log-file | api/controller/event_log_test.go::TestLogListRejectsMissingLogIdentity | | rainbond.eventlog.file-store | 事件日志文件存储的追加读取与清理 | active | regression | api/eventlog/store.JSONLinesFileStore | api/eventlog/store/filestore_test.go::TestJSONLinesFileStore | | rainbond.eventlog.file-store-concurrency | 事件日志文件存储支持并发写入 | active | regression | api/eventlog/store.JSONLinesFileStore.Append | api/eventlog/store/filestore_test.go::TestFileStoreConcurrency | | rainbond.file-operate.upload-folder-path-traversal | 文件操作上传拒绝不安全相对路径 | active | regression | api/controller.resolveUploadRelativePath | api/controller/service_monitor_upload_test.go::TestResolveUploadRelativePathRejectsTraversal | | rainbond.file-operate.upload-folder-relative-path | 文件操作上传保留文件夹路径 | active | regression | api/controller.resolveUploadRelativePath | api/controller/service_monitor_upload_test.go::TestResolveUploadRelativePathPreservesFolderFromContentDisposition | | rainbond.filepersistence.volcengine-client-init | 幂等初始化并复用火山引擎 NAS 客户端 | active | regression | pkg/component/filepersistence.VolcengineProvider.init | pkg/component/filepersistence/volcengine_test.go::TestVolcengineProviderInitIsIdempotent | | rainbond.framework-detect.angular-spa | 识别 Angular SPA 模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Angular_SPA | | rainbond.framework-detect.angular-ssr | 识别 Angular SSR 模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Angular_SSR | | rainbond.framework-detect.cra | 识别 Create React App 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_CRA | | rainbond.framework-detect.display-name | 解析框架展示名称 | active | regression | builder/parser/code.GetDisplayName | builder/parser/code/framework_test.go::TestGetDisplayName | | rainbond.framework-detect.express | 识别 Express 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Express | | rainbond.framework-detect.nestjs | 识别 NestJS 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NestJS | | rainbond.framework-detect.nextjs | 从源码目录识别 Next.js 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NextJS | | rainbond.framework-detect.nextjs-no-config | 无配置文件时识别 Next.js | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NextJS_NoConfigFile | | rainbond.framework-detect.nextjs-ssr | 识别 Next.js SSR 模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NextJS_SSR | | rainbond.framework-detect.nextjs-static-export | 识别 Next.js 静态导出模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NextJS_StaticExport | | rainbond.framework-detect.no-framework | 普通 Node 项目不识别框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NoFramework | | rainbond.framework-detect.no-package-json | 缺少 package.json 时不识别前端框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_NoPackageJSON | | rainbond.framework-detect.nuxt | 从源码目录识别 Nuxt 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Nuxt | | rainbond.framework-detect.nuxt-static-target | 识别 Nuxt 静态目标模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Nuxt_StaticTarget | | rainbond.framework-detect.nuxt3-ssr-false | 识别关闭 SSR 的 Nuxt3 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Nuxt3_SSRFalse | | rainbond.framework-detect.nuxt3-static | 识别 Nuxt3 静态输出模式 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Nuxt3_NitroStatic | | rainbond.framework-detect.supported-list | 列出支持识别的前端框架 | active | regression | builder/parser/code.GetSupportedFrameworks | builder/parser/code/framework_test.go::TestGetSupportedFrameworks | | rainbond.framework-detect.version-normalization | 规范化框架依赖版本号 | active | regression | builder/parser/code.cleanVersion | builder/parser/code/framework_test.go::TestCleanVersion | | rainbond.framework-detect.vite | 识别 Vite 框架 | active | regression | builder/parser/code.DetectFramework | builder/parser/code/framework_test.go::TestDetectFramework_Vite | | rainbond.gateway.allocate-lb-port | 分配可用网关负载均衡端口 | active | regression | api/handler.selectAvailablePort | api/handler/gateway_action_test.go::TestSelectAvailablePort | | rainbond.gateway.auto-certificate-route-lifecycle | Reconcile automatic certificate resources across route ownership changes | active | regression | automatic certificate route lifecycle | api/controller/apigateway/api_gateway_route_test.go::TestEnsureCertManagerResourcesAdoptsExistingRouteOwnership
api/controller/apigateway/api_gateway_route_test.go::TestDeleteCertManagerResourcesRemovesCertificateAndTLS
api/controller/apigateway/api_gateway_route_test.go::TestCertManagerRouteNameUsesResourceSegment | | rainbond.gateway.certificate-resource-consistency | Keep gateway certificate resources consistent | active | regression | api/handler.GatewayAction.AddGatewayCertificate | api/handler/gateway_action_test.go::TestGatewayCertificateResourceConsistency | | rainbond.gateway.client-ca-lifecycle | Manage gateway client CA lifecycle | active | regression | api/handler.GatewayAction.AddGatewayClientCA | api/handler/gateway_action_test.go::TestGatewayClientCALifecycle | | rainbond.gateway.domain-mtls | Configure inbound mTLS per gateway domain | active | regression | api/handler.GatewayAction.ConfigureGatewayDomainMTLS | api/handler/gateway_action_test.go::TestGatewayDomainMTLS | | rainbond.gateway.http-route-delete-component-event | 删除网关 HTTPRoute 时记录组件事件 | active | regression | github.com/goodrain/rainbond/api/handler.(*GatewayAction).DeleteGatewayHTTPRoute | api/handler/gateway_action_test.go::TestCreateGatewayHTTPRouteDeleteEvents | | rainbond.gateway.http-route-source-ip-validation | Normalize and validate HTTP route source IP restrictions | active | regression | api/controller/apigateway.Struct.CreateHTTPAPIRoute | api/controller/apigateway/api_gateway_route_remote_addrs_test.go::TestCreateHTTPAPIRouteNormalizesRemoteAddrs | | rainbond.gateway.http-route-stable-rule-name | Keep APISIX HTTP route rule identity stable | active | regression | api/controller/apigateway.Struct.CreateHTTPAPIRoute | api/controller/apigateway/api_gateway_route_test.go::TestStableHTTPRouteRuleName
api/controller/apigateway/api_gateway_route_test.go::TestHTTPRouteCreateFailure | | rainbond.gateway.prevent-tcp-route-delete-recreation-race | Protect recreated TCP route Services with UID delete preconditions | active | regression | api/controller/apigateway.Struct.DeleteTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteDoesNotDeleteRecreatedServiceWithStaleUID | | rainbond.gateway.protect-tcp-route-service-ownership | Reject TCP route updates for missing or different Service owners | active | regression | api/controller/apigateway.Struct.CreateTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteRejectsExistingServiceWithoutMatchingOwner | | rainbond.gateway.protect-unlabeled-tcp-route-service | Do not delete unlabeled TCP route Services for owned requests | active | regression | api/controller/apigateway.Struct.DeleteTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteWithServiceIDDoesNotDeleteUnlabeledService | | rainbond.gateway.reassign-conflicting-imported-tcp-port | Reassign imported TCP ports that conflict with existing NodePorts | active | regression | api/handler.reassignConflictingTCPRulePorts | api/handler/gateway_action_test.go::TestReassignConflictingTCPRulePorts | | rainbond.gateway.reconcile-stale-tcp-nodeport-rules | Reconcile stale TCP NodePort database rules after Kubernetes allocation | active | regression | api/controller/apigateway.Struct.CreateTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteReconcilesStaleDatabaseRules | | rainbond.gateway.reject-duplicate-tcp-nodeport | Reject duplicate TCP NodePort bindings | active | regression | TCP NodePort binding | db/mysql/dao/gateway_test.go::TestTCPRuleDaoAddModelRejectsPortOwnedByAnotherRule
api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteRejectsExplicitPortOwnedByAnotherService | | rainbond.gateway.release-absent-tcp-nodeport-owner | Release only the requested owner when a TCP route Service is absent | active | regression | api/controller/apigateway.Struct.DeleteTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteAlreadyAbsentReleasesOnlyRequestedOwner | | rainbond.gateway.release-captured-tcp-nodeport-rules | Release only TCP NodePort rules captured before Service deletion | active | regression | api/controller/apigateway.Struct.DeleteTCPRoute | api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteReleasesOnlyCapturedRuleIDs | | rainbond.gateway.report-tcp-service-create-error-details | TCP route creation reports Kubernetes error details | active | regression | POST /api-gateway/v1/{tenant_name}/routes/tcp | api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteReportsServiceCreateErrorDetails | | rainbond.gateway.validate-http-route-match | Reject HTTP gateway routes without hosts or paths | active | regression | api/controller/apigateway.Struct.CreateHTTPAPIRoute | api/controller/apigateway/api_gateway_route_test.go::TestHTTPRouteResourceNameValidatesMatch | | rainbond.gateway.validate-tcp-nodeport-route-name | Reject out-of-range TCP NodePorts parsed from route names | active | regression | api/controller/apigateway.nodePortFromTCPRouteName | api/controller/apigateway/api_gateway_route_test.go::TestNodePortFromTCPRouteNameValidatesRange | | rainbond.helm-release.app-version-format | 为 Helm 历史输出格式化应用版本号 | active | regression | pkg/helm.formatAppVersion | pkg/helm/helm_release_test.go::TestGetReleaseHistory | | rainbond.helm-release.chart-name-format | 为历史和摘要输出格式化 Helm chart 名称 | active | regression | pkg/helm.formatChartName | pkg/helm/helm_release_test.go::TestGetReleaseHistory | | rainbond.helm-release.classify-resources | 按资源类型归类 Helm 发布资源 | active | regression | api/handler.splitHelmReleaseResources | api/handler/helm_release_test.go::TestSplitHelmReleaseResourcesClassifiesKinds | | rainbond.helm-release.default-namespace | 推导 Helm 发布默认命名空间 | active | regression | api/handler.helmReleaseNamespace | api/handler/helm_release_test.go::TestHelmReleaseNamespaceUsesTenantNamespaceWhenPresent
api/handler/helm_release_test.go::TestHelmReleaseNamespaceFallsBackToTenantUUID | | rainbond.helm-release.detail-summary | 汇总 Helm 发布详情 | active | regression | api/handler.summarizeHelmReleaseDetail | api/handler/helm_release_test.go::TestSummarizeHelmReleaseDetailBuildsStableDTO | | rainbond.helm-release.history-summary | 汇总 Helm 发布历史 | active | regression | api/handler.summarizeHelmReleaseHistory | api/handler/helm_release_test.go::TestSummarizeHelmReleaseHistoryBuildsStableDTO
pkg/helm/helm_release_test.go::TestGetReleaseHistory | | rainbond.helm-release.install-defaults | 规范 Helm 安装默认参数 | active | regression | api/handler.HelmReleaseInstallRequest.Normalize | api/handler/helm_release_test.go::TestHelmReleaseInstallRequestNormalizeDefaults | | rainbond.helm-release.install-validate | 校验 Helm 安装请求 | active | regression | api/handler.HelmReleaseInstallRequest.Validate | api/handler/helm_release_test.go::TestHelmReleaseInstallRequestValidate | | rainbond.helm-release.installable-check | 拒绝不可安装的 Helm chart 类型 | active | regression | pkg/helm.checkIfInstallable | pkg/helm/helm_release_test.go::TestCheckIfInstallable | | rainbond.helm-release.list-summary | 汇总 Helm 发布列表项 | active | regression | api/handler.summarizeHelmRelease | api/handler/helm_release_test.go::TestSummarizeHelmReleaseBuildsStableDTO | | rainbond.helm-release.match-managed-resource | 识别 Helm 托管资源归属 | active | regression | api/handler.isHelmReleaseResource | api/handler/helm_release_test.go::TestIsHelmReleaseResourceMatchesManagedByAndInstanceLabels | | rainbond.helm-release.oci-reference-normalize | 规范化 OCI chart 引用并推导版本标签 | active | regression | pkg/helm.normalizeOCIChartReference | pkg/helm/helm_release_test.go::TestNormalizeOCIChartReference | | rainbond.helm-release.preview-source-error | 将 Helm 预览来源错误转换为错误请求 | active | regression | api/handler.wrapHelmChartPreviewSourceError | api/handler/helm_release_test.go::TestWrapHelmChartPreviewSourceErrorConvertsToBadRequest
api/handler/helm_release_test.go::TestWrapHelmChartPreviewSourceErrorPreservesBadRequest | | rainbond.helm-release.resolve-namespace | 解析 Helm 发布命名空间 | active | regression | api/handler.HelmReleaseHandler.resolveNamespace | api/handler/helm_release_test.go::TestResolveHelmReleaseNamespaceUsesExplicitNamespace | | rainbond.helm-release.resolve-namespace-fallback | 请求未指定时从团队推导 Helm 命名空间 | active | regression | api/handler.(*HelmReleaseHandler).resolveNamespace | api/handler/helm_release_test.go::TestResolveHelmReleaseNamespaceFallsBackToTenantNamespace | | rainbond.helm-release.rollback-validate | 校验 Helm 回滚版本 | active | regression | api/handler.HelmReleaseRollbackRequest.Validate | api/handler/helm_release_test.go::TestHelmReleaseRollbackRequestValidate | | rainbond.helm-release.strip-kube-version | 在安装或加载前移除 chart 的 kubeVersion 要求 | active | regression | pkg/helm.removeKubeVersionFromChart | pkg/helm/helm_release_test.go::TestCheckIfInstallable | | rainbond.helm-release.upgrade-chart-guard | 拦截 Helm 升级图表不匹配 | active | regression | api/handler.validateUpgradeChartName | api/handler/helm_release_test.go::TestValidateUpgradeChartNameRejectsMismatchByDefault
api/handler/helm_release_test.go::TestValidateUpgradeChartNameAllowsMismatchWithExplicitConfirmation | | rainbond.helm-release.values-yaml | 将 Helm values YAML 解析为可安装的 values 映射 | active | regression | pkg/helm.parseValuesYAML | pkg/helm/helm_release_test.go::TestParseValuesYAML | | rainbond.helm-repo.add | 添加 Helm 仓库 | active | integration | pkg/helm.Repo.Add | pkg/helm/repo_test.go::TestRepoAdd | | rainbond.helm-repo.add-idempotent | 当相同 Helm 仓库已存在时跳过重复添加 | active | regression | pkg/helm.Repo.Add | pkg/helm/repo_test.go::TestRepoAddSkipsExistingConfig | | rainbond.helm-repo.reject-deprecated | 拒绝已废弃的 Helm 仓库地址 | active | regression | pkg/helm.Repo.Add | pkg/helm/repo_test.go::TestRepoAddRejectsDeprecatedRepo | | rainbond.helm-repo.requested-filter | 校验并匹配请求更新的 Helm 仓库名称 | active | regression | pkg/helm.checkRequestedRepos | pkg/helm/helm_release_test.go::TestCheckRequestedRepos | | rainbond.image-clean.registry-gc-noop | 当没有匹配的仓库 Pod 时跳过垃圾回收执行 | active | regression | builder/clean.Manager.PodExecCmd | builder/clean/clean_test.go::TestPodExecCmdNoMatchingPod | | rainbond.image-clean.stop-loop | 通过取消上下文停止镜像清理管理器循环 | active | regression | builder/clean.Manager.Stop | builder/clean/clean_test.go::TestManagerStopCancelsContext | | rainbond.image-share.single-attempt | 镜像分享失败后不自动重试 | active | regression | builder/exector.imageShare | builder/exector/share_image_test.go::TestExecuteImageShareOnceDoesNotRetryFailure
builder/exector/share_image_test.go::TestExecuteImageShareOnceReturnsSuccess | | rainbond.ingress-nginx.meta-namespace-key | 为 ingress-nginx 监听对象构建 namespace/name 键 | active | regression | util/ingress-nginx/k8s.MetaNamespaceKey | util/ingress-nginx/k8s/main_test.go::TestMetaNamespaceKey | | rainbond.ingress-nginx.name-namespace-parse | 解析 ingress-nginx 资源的 namespace/name 标识 | active | regression | util/ingress-nginx/k8s.ParseNameNS | util/ingress-nginx/k8s/main_test.go::TestParseNameNS | | rainbond.ingress-nginx.node-ip-resolve | 为 ingress-nginx helper 解析节点内外网 IP | active | regression | util/ingress-nginx/k8s.GetNodeIPOrName | util/ingress-nginx/k8s/main_test.go::TestGetNodeIPOrName | | rainbond.ingress-nginx.pod-details | 根据环境变量和集群状态解析 ingress-nginx Pod 详情 | active | regression | util/ingress-nginx/k8s.GetPodDetails | util/ingress-nginx/k8s/main_test.go::TestGetPodDetails | | rainbond.k8s-resource.crd-cascade-delete | CRD cascade deletion preserves dependency order | active | regression | api/handler.k8sResourceDeletionOrchestrator.Delete | api/handler/resource_deletion_test.go::TestK8sResourceDeletionDeletesCustomResourcesBeforeDefinition | | rainbond.k8s-resource.deletion-request-timeout | Kubernetes deletion requests outlive the global HTTP timeout | active | regression | pkg/interceptors.requestTimeout | pkg/interceptors/http_test.go::TestRequestTimeout | | rainbond.k8s-resource.deletion-timeout-final-check | Kubernetes deletion timeout performs a final live check | active | regression | api/handler.k8sResourceDeletionOrchestrator.Delete | api/handler/resource_deletion_test.go::TestK8sResourceDeletionFinalCheckAvoidsTimeoutRace | | rainbond.k8s-resource.failed-delete-metadata-only | Failed resources are metadata-only during deletion | active | regression | api/handler.k8sResourceDeletionOrchestrator.Delete | api/handler/resource_deletion_test.go::TestK8sResourceDeletionSkipsFailedResourceKubernetesDeletion | | rainbond.k8s-resource.metadata-reconcile | Kubernetes resource metadata reconciliation | active | regression | api/handler.k8sResourceDeletionOrchestrator.Reconcile | api/handler/resource_deletion_test.go::TestK8sResourceReconcileDistinguishesMissingAndUnknown | | rainbond.k8s-resource.response-array-contract | Resource deletion and reconciliation responses encode empty lists as arrays | active | regression | k8sResourceDeletionOrchestrator | api/handler/resource_deletion_test.go::TestK8sResourceDeletionResponseArrays
api/handler/resource_deletion_test.go::TestK8sResourceReconcileResponseArrays | | rainbond.k8s-resource.stop-recreating-controller | Stop in-application controllers before deleting generated custom resources | active | regression | api/handler.k8sResourceDeletionOrchestrator.Delete | api/handler/resource_deletion_test.go::TestK8sResourceDeletionStopsManagedControllerBeforeGeneratedResources
api/handler/resource_deletion_test.go::TestK8sResourceDeletionKeepsControllerUntilFinalizedResourcesAreGone | | rainbond.k8s.scheme-registers-kubevirt-vm | K8s scheme registers KubeVirt VirtualMachine | active | regression | pkg/component/k8s.init | pkg/component/k8s/k8sComponent_test.go::TestSchemeRegistersKubeVirtVirtualMachine | | rainbond.kubeblocks.component-selector | 为 KubeBlocks 组件生成标签选择器 | active | regression | util/kubeblocks.GenerateKubeBlocksSelector | util/kubeblocks/kubeblocks_test.go::TestGenerateKubeBlocksSelector | | rainbond.license.decode | 解码并解析许可证令牌内容 | active | regression | api/util/license.DecodeLicense | api/util/license/rsa_license_test.go::TestDecodeLicense | | rainbond.license.parse-public-key | 解析 PEM 编码的 RSA 公钥 | active | regression | api/util/license.ParsePublicKey | api/util/license/rsa_license_test.go::TestParsePublicKey | | rainbond.license.plugin-allowlist | 根据许可证映射判断插件是否允许使用 | active | regression | api/util/license.IsPluginAllowed | api/util/license/rsa_license_test.go::TestIsPluginAllowed_Wildcard | | rainbond.license.round-trip | 往返编码解码并校验许可证令牌 | active | regression | api/util/license.EncodeLicense | api/util/license/rsa_license_test.go::TestRoundTrip | | rainbond.license.status-projection | 将许可证令牌投影为状态响应 | active | regression | api/util/license.TokenToStatus | api/util/license/rsa_license_test.go::TestTokenToStatus | | rainbond.license.validate-token | 校验许可证企业绑定与生效时间窗口 | active | regression | api/util/license.ValidateToken | api/util/license/rsa_license_test.go::TestValidateToken_Valid | | rainbond.license.verify-signature | 校验许可证 RSA 签名 | active | regression | api/util/license.VerifySignature | api/util/license/rsa_license_test.go::TestVerifySignature_Valid | | rainbond.lifecycle.service-reconcile-preserves-identity | Service reconciliation preserves allocated Kubernetes identity | active | regression | worker/appm/controller.CreateKubeService | worker/appm/controller/kube-controller_test.go::TestCreateKubeServiceReconcilesOwnedServiceAndPreservesIdentity | | rainbond.lifecycle.service-reconcile-rejects-foreign-owner | Service reconciliation rejects foreign ownership | active | regression | worker/appm/controller.CreateKubeService | worker/appm/controller/kube-controller_test.go::TestCreateKubeServiceRejectsForeignService | | rainbond.lifecycle.stop-preserves-service | Stopping a component preserves its generated Service identity | active | regression | worker/appm/controller.stopController.stopOne | worker/appm/controller/stop_test.go::TestStopPreservesGeneratedService | | rainbond.lifecycle.stop-suppresses-exit-event | Suppress container exit events during intentional stop | active | regression | worker/master/podevent.shouldReportContainerExit | worker/master/podevent/health_event_test.go::TestShouldReportContainerExit | | rainbond.manual-pvc-upgrade-delete-idempotent | Manual PVC cleanup tolerates absent claims and preserves deletion errors | active | regression | upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsDeletesStaleClaims | | rainbond.manual-pvc-upgrade-preserves-bound-claim-immutable-spec | Preserve bound manual PVC immutable spec fields during app upgrade | active | regression | worker/appm/controller.upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsPreservesBoundClaimImmutableSpec | | rainbond.manual-pvc-upgrade-preserves-existing-metadata | Preserve existing manual PVC metadata during app upgrade | active | regression | worker/appm/controller.upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsPreservesExistingMetadata | | rainbond.manual-pvc-upgrade-skips-unchanged-storage | Skip manual PVC updates when storage request is unchanged | active | regression | worker/appm/controller.upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsSkipsUnchangedStorage | | rainbond.manual-pvc-upgrade-surfaces-update-errors | 应用升级时返回手动 PVC 更新错误 | active | regression | worker/appm/controller.upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsReturnsUpdateError | | rainbond.manual-pvc-upgrade-updates-existing-claim | 应用升级时更新已有手动 PVC | active | regression | worker/appm/controller.upgradeController.upgradeManualClaims | worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsUpdatesExistingClaim | | rainbond.maven.list-modules | 列出 Maven 多服务模块 | active | regression | builder/parser/code/multisvc.maven.ListModules | builder/parser/code/multisvc/maven_test.go::TestMaven_ListModules | | rainbond.maven.parse-pom | 解析 Maven 父 pom 的模块与打包方式 | active | regression | builder/parser/code/multisvc.parsePom | builder/parser/code/multisvc/maven_test.go::TestMaven_ParsePom | | rainbond.mq.cancelable-dequeue | 消息队列出队响应取消并保留待处理消息 | active | regression | mq/api/mq.etcdQueue.Dequeue | mq/api/mq/store_test.go::TestDequeueCanceledRequestPreservesQueuedMessage
mq/api/mq/store_test.go::TestDequeueHonorsCallerDeadline
mq/api/mq/store_test.go::TestCanceledDequeueDoesNotConsumeLaterMessage
mq/api/mq/store_test.go::TestDequeueWaitsForMessagesInFIFOOrder | | rainbond.multisvc.ignore-non-java | 在多服务解析器选择中忽略非 Java 语言 | active | regression | builder/parser/code/multisvc.NewMultiServiceI | builder/parser/code/multisvc/multi_services_test.go::TestNewMultiServiceI_IgnoresLanguagesWithoutJavaMaven | | rainbond.multisvc.select-java-maven | 为复合语言选择 Java Maven 多服务解析器 | active | regression | builder/parser/code/multisvc.NewMultiServiceI | builder/parser/code/multisvc/multi_services_test.go::TestNewMultiServiceI_SupportsCompositeJavaMaven | | rainbond.node-version.display-info | 汇总 Node 版本展示与派生信息 | active | regression | builder/parser/code.NodeVersionInfo helpers | builder/parser/code/node_version_test.go::TestCleanVersionSpec
builder/parser/code/node_version_test.go::TestExtractMajorVersion
builder/parser/code/node_version_test.go::TestExtractMinorPatch
builder/parser/code/node_version_test.go::TestNodeVersionInfo_IsLTS
builder/parser/code/node_version_test.go::TestNodeVersionInfo_GetNodeVersionDisplay | | rainbond.node-version.fallback-supported-range | 将不受支持的 Node.js 版本回退到支持范围 | active | regression | builder/parser/code.ResolveNodeVersion | builder/parser/code/node_version_test.go::TestResolveNodeVersion_UnsupportedVersion | | rainbond.node-version.normalize-v-prefix | 规范化带 v 前缀的 Node.js 版本 | active | regression | builder/parser/code.ResolveNodeVersion | builder/parser/code/node_version_test.go::TestResolveNodeVersion_WithVPrefix | | rainbond.node-version.parse-package-json | 从 package.json 解析 Node 版本要求 | active | regression | builder/parser/code.ParseNodeVersionFromPackageJSON | builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON
builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON_NoEngines
builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON_NoPackageJSON | | rainbond.node-version.resolve-range | 解析范围形式的 Node.js 版本约束 | active | regression | builder/parser/code.ResolveNodeVersion | builder/parser/code/node_version_test.go::TestResolveNodeVersion_Range | | rainbond.node-version.resolve-spec | 将 Node 版本表达式解析为支持的运行时版本 | active | regression | builder/parser/code.ResolveNodeVersion | builder/parser/code/node_version_test.go::TestResolveNodeVersion_Empty
builder/parser/code/node_version_test.go::TestResolveNodeVersion_Wildcard
builder/parser/code/node_version_test.go::TestResolveNodeVersion_GreaterThanOrEqual
builder/parser/code/node_version_test.go::TestResolveNodeVersion_Caret
builder/parser/code/node_version_test.go::TestResolveNodeVersion_Tilde
builder/parser/code/node_version_test.go::TestResolveNodeVersion_XNotation
builder/parser/code/node_version_test.go::TestResolveNodeVersion_MajorOnly
builder/parser/code/node_version_test.go::TestResolveNodeVersion_ExactVersion | | rainbond.ns-resource.batch-create | 批量创建命名空间资源 | active | regression | api/handler.NsResourceHandler.CreateNsResource | api/handler/ns_resource_test.go::TestCreateNsResourceBatchAggregatesPartialSuccess
api/handler/ns_resource_test.go::TestCreateNsResourceBatchPreservesExplicitNamespace | | rainbond.ns-resource.detect-source | 识别命名空间资源来源 | active | regression | api/handler.detectResourceSource | api/handler/ns_resource_test.go::TestDetectResourceSource | | rainbond.ns-resource.handler-singleton | 复用命名空间资源处理器单例 | active | unit | api/handler.GetNsResourceHandler | api/handler/ns_resource_test.go::TestGetNsResourceHandlerSingleton | | rainbond.ns-resource.ingress-summary | 汇总 Ingress 资源路由元数据 | active | regression | api/handler.toNsResourceInfo | api/handler/ns_resource_test.go::TestToNsResourceInfoIncludesIngressSummary | | rainbond.ns-resource.mark-source | 标记命名空间资源来源 | active | regression | api/handler.injectSourceLabel | api/handler/ns_resource_test.go::TestInjectSourceLabelYaml
api/handler/ns_resource_test.go::TestInjectSourceLabelManual | | rainbond.ns-resource.resolve-tenant-namespace | 解析团队命名空间 | active | regression | api/handler.(*NsResourceHandler).getTenantNamespace | api/handler/ns_resource_test.go::TestGetTenantNamespaceUsesNamespaceField
api/handler/ns_resource_test.go::TestGetTenantNamespaceFallsBackToUUIDWhenNamespaceEmpty | | rainbond.overview.disk-availability | Distinguish missing node filesystem measurements | active | regression | nodesHandle.ListNodes | api/handler/overview_truthful_data_test.go::TestOverviewDiskStatsAvailability | | rainbond.overview.empty-installed-plugins | Empty installed plugin results encode as an array | active | regression | clusterAction.ListPlugins | api/handler/overview_truthful_data_test.go::TestOverviewEmptyInstalledPluginsAreAnArray | | rainbond.overview.kubernetes-cluster-resources | Read truthful bounded Kubernetes workload resource snapshots | active | regression | clusterAction.GetClusterInfo | api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesUseKubernetesNotPrometheus
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesReportZeroOnlyAfterSuccessfulReads
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesCoalesceConcurrentRefresh
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceRequestsIncludeInitSidecarsAndOverhead
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesPreserveFractionalCapacityAndScheduledScope
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesIncludeEmptySchedulableNodes
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceRefreshWaitRespectsCancellation
api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceOptionalVersionCannotBlockResources | | rainbond.overview.lightweight-nodes | Lightweight node health skips optional statistics | active | regression | nodesHandle.ListNodesWithOptions | api/handler/overview_truthful_data_test.go::TestOverviewLightweightNodesSkipStats | | rainbond.overview.nodes-request-context | Preserve node request context and optional statistics default | active | regression | GET /v2/nodes | api/controller/overview_nodes_test.go::TestOverviewNodesRequestPreservesContextAndDefaults | | rainbond.overview.nonblocking-local-disk | Optional local disk sampling never blocks cluster resources | active | regression | clusterAction.withLocalDiskStats | api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceCannotBeBlockedByLocalDisk
api/handler/overview_truthful_data_test.go::TestOverviewLocalDiskFailureUsesCooldownAndPreservesStaleSample | | rainbond.package-build.clean-extracted-content | 解压前清理旧包展开内容 | active | regression | builder/parser.cleanPackageExtractDir | builder/parser/package_archive_test.go::TestCleanPackageExtractDirKeepsSelectedArchiveOnly | | rainbond.package-build.select-archive-over-extracted-content | 优先选择上传压缩包而不是旧解压内容 | active | regression | builder/parser.selectPackageArchive | builder/parser/package_archive_test.go::TestSelectPackageArchiveSkipsExtractedDirectories | | rainbond.package-build.select-latest-archive | 二次上传时选择最新压缩包 | active | regression | builder/parser.selectPackageArchive | builder/parser/package_archive_test.go::TestSelectPackageArchiveUsesLatestArchiveForSecondUpload | | rainbond.package-manager.commands | 按包管理器生成安装构建启动命令 | active | regression | builder/parser/code.PackageManagerInfo | builder/parser/code/package_manager_test.go::TestPackageManagerInfo_GetCommands | | rainbond.package-manager.default-npm | 无锁文件时默认使用 npm | active | regression | builder/parser/code.DetectPackageManager | builder/parser/code/package_manager_test.go::TestDetectPackageManager_Default | | rainbond.package-manager.detect-lockfile | 通过锁文件识别包管理器 | active | regression | builder/parser/code.DetectPackageManager | builder/parser/code/package_manager_test.go::TestDetectPackageManager_PNPM
builder/parser/code/package_manager_test.go::TestDetectPackageManager_Yarn
builder/parser/code/package_manager_test.go::TestDetectPackageManager_NPM | | rainbond.package-manager.package-json-field | 通过 package.json 字段识别包管理器 | active | regression | builder/parser/code.DetectPackageManager | builder/parser/code/package_manager_test.go::TestDetectPackageManager_PackageManagerField
builder/parser/code/package_manager_test.go::TestDetectPackageManager_PackageManagerFieldYarn | | rainbond.package-manager.parse-package-manager-field | 解析 packageManager 字段语法 | active | regression | builder/parser/code.parsePackageManagerField | builder/parser/code/package_manager_test.go::TestParsePackageManagerField | | rainbond.package-manager.priority | 多锁文件场景下按优先级识别包管理器 | active | regression | builder/parser/code.DetectPackageManager | builder/parser/code/package_manager_test.go::TestDetectPackageManager_Priority
builder/parser/code/package_manager_test.go::TestDetectPackageManager_YarnOverNPM | | rainbond.package-manager.stringer | 将包管理器枚举渲染为字符串 | active | regression | builder/parser/code.PackageManager.String | builder/parser/code/package_manager_test.go::TestPackageManager_String | | rainbond.plugin-build.detect-dockerfile | 检测插件源码目录中是否存在 Dockerfile | active | regression | builder/exector.checkDockerfile | builder/exector/plugin_dockerfile_test.go::TestCheckDockerfile | | rainbond.plugin-build.image-input-validate | 在插件镜像构建前拒绝空值或非法镜像引用 | active | regression | builder/exector.exectorManager.run | builder/exector/plugin_image_test.go::TestPluginImageRunRejectsEmptyImageURL | | rainbond.plugin-build.image-tag | 根据源镜像名和版本生成插件镜像标签 | active | regression | builder/exector.createPluginImageTag | builder/exector/plugin_image_test.go::TestCreatePluginImageTag | | rainbond.plugin-dockerfile-build.default-arch-affinity | Default plugin Dockerfile build arch affinity | active | regression | builder/sources.newBuildKitPodSpec | builder/sources/image_test.go::TestNewBuildKitPodSpecDefaultsMissingArchToRuntime | | rainbond.rainbondfile.missing | 缺少 rainbondfile 时返回未找到 | active | regression | builder/parser/code.ReadRainbondFile | builder/parser/code/rainbondfile_test.go::TestReadRainbondFile_ReturnsNotFoundWhenMissing | | rainbond.rainbondfile.parse | 解析 rainbondfile YAML 配置 | active | regression | builder/parser/code.ReadRainbondFile | builder/parser/code/rainbondfile_test.go::TestReadRainbondFile_ParsesYamlConfig | | rainbond.rainbondfile.read-project-root | 从项目根目录读取 rainbondfile | active | unit | builder/parser/code.ReadRainbondFile | builder/parser/code/rainbondfile_test.go::TestReadRainbondFile | | rainbond.region-api.configured-token-only | 仅接受配置的集群 Token | active | regression | api/middleware.FullToken | api/middleware/token_test.go::TestFullTokenAllowsOnlyConfiguredRegionToken | | rainbond.registry.delete-vm-image-manifest | Delete internal VM image manifest from registry | active | regression | api/handler.ServiceAction.DeleteRegistryImageManifest | api/handler/registry_image_test.go::TestDeleteRegistryImageManifestDeletesInternalVMImage
api/handler/registry_image_test.go::TestDeleteRegistryImageManifestRejectsExternalRegistry
api/handler/registry_image_test.go::TestDeleteRegistryImageManifestTreatsMissingManifestAsDeleted | | rainbond.registry.manifest-exists-oci | 备份校验支持 OCI 镜像清单 | active | regression | builder/sources/registry.Registry.ManifestExists | builder/sources/registry/manifest_test.go::TestManifestExistsAcceptsOCIManifestTypes | | rainbond.resource-center.collect-ingress-services | 收集 Ingress 后端服务名 | active | regression | api/handler.collectIngressServiceNames | api/handler/resource_center_test.go::TestCollectIngressServiceNames | | rainbond.resource-center.event-summary | 汇总资源事件信息 | active | regression | api/handler.toResourceEventInfo | api/handler/resource_center_test.go::TestToResourceEventInfo | | rainbond.resource-center.match-selector | 按选择器匹配资源标签 | active | regression | api/handler.labelsMatchSelector | api/handler/resource_center_test.go::TestLabelsMatchSelector | | rainbond.resource-center.rfc3339-timestamps | Serialize resource center timestamps as RFC3339 | active | regression | api/handler.formatResourceTimestamp | api/handler/resource_center_test.go::TestFormatResourceTimestamp | | rainbond.resource-import.daemonset-component | 将 DaemonSet 导入为组件 | active | regression | api.handler.ComponentController.CreateComponent | api/handler/resource_import_daemonset_test.go::TestExtendMethodForResourceTypeSupportsDaemonSet | | rainbond.runtime.composite-nodejs | 复合语言场景使用 Node 运行时解析 | active | regression | builder/parser/code.CheckRuntime | builder/parser/code/runtime_test.go::TestCheckRuntime_CompositeNodejsLanguageUsesNodeRuntime | | rainbond.runtime.node-cnb-framework-detection | CNB 构建检测 Node.js 框架信息 | active | regression | builder/parser/code.CheckRuntimeByStrategy | builder/parser/code/runtime_test.go::TestCheckRuntimeByStrategy_NodejsCNBDetectsFrameworkWithoutEngines | | rainbond.runtime.node-defaults | 从 package.json 返回默认 Node 运行时信息 | active | regression | builder/parser/code.CheckRuntime | builder/parser/code/runtime_test.go::TestCheckRuntime_NodejsReturnsDefaultRuntimeInfoFromPackageJson | | rainbond.runtime.static-empty | 静态语言返回空运行时信息 | active | regression | builder/parser/code.CheckRuntime | builder/parser/code/runtime_test.go::TestCheckRuntime_StaticReturnsEmptyRuntimeInfo | | rainbond.service-check.completion-log-summary | 服务检测完成摘要日志反映真实检测状态 | active | regression | builder/exector.serviceCheckCompletionLogSummary | builder/exector/service_check_test.go::TestServiceCheckCompletionLogSummary | | rainbond.service-check.eventlog-progress | 将服务检测进度消息同步写入事件日志 | active | regression | builder/exector.logServiceCheckProgress | builder/exector/service_check_test.go::TestLogServiceCheckProgressMirrorsMessageToEventLogger | | rainbond.service-probe.reconcile-duplicate-mode | 协调重复的组件探针模式 | active | regression | db/mysql/dao.ServiceProbeDaoImpl.AddModel | db/mysql/dao/service_probe_test.go::TestServiceProbeDaoAddModelReconcilesExistingMode | | rainbond.service-type.daemonset | DaemonSet 组件类型分类 | active | regression | db.model.ServiceType | db/model/tenant_daemonset_test.go::TestServiceTypeDaemonSetClassification | | rainbond.service.file-manage-command-safety | 构建带路径分隔符的安全文件管理列表命令 | active | regression | api/handler.buildFileManageListCommand | api/handler/service_file_manage_test.go::TestBuildFileManageListCommand | | rainbond.service.file-manage-exec-error-detail | 文件管理列表失败时保留 exec 的 stderr 细节 | active | regression | api/handler.wrapFileManageExecError | api/handler/service_file_manage_test.go::TestWrapFileManageExecErrorIncludesStderr | | rainbond.service.port-outer-idempotent-close | Keep repeated external port closes idempotent | active | regression | api/handler.(*ServiceAction).PortOuter | api/handler/service_port_outer_test.go::TestServiceActionPortOuterAlreadyClosedReturnsPort | | rainbond.share.image-from-snapshot-deploy-version | 镜像分享使用请求中的快照部署版本 | active | regression | api/handler/share.ServiceShareHandle.Share | api/handler/share/service_share_test.go::TestServiceShareUsesRequestedDeployVersionForImageShare | | rainbond.share.slug-from-snapshot-deploy-version | Slug 分享使用请求中的快照部署版本 | active | regression | api/handler/share.ServiceShareHandle.Share | api/handler/share/service_share_test.go::TestServiceShareUsesRequestedDeployVersionForSlugShare | | rainbond.source-args.default-cnb-ports | 为多语言项目应用默认 CNB 端口 | active | regression | builder/parser.applyCNBDefaultPorts | builder/parser/source_code_args_test.go::TestCNBDefaultPorts_MultiLanguage | | rainbond.source-args.multi-language | 为多语言项目解析源码构建参数 | active | regression | builder/parser.SourceCodeParse.GetArgs | builder/parser/source_code_args_test.go::TestGetArgs_MultiLanguage | | rainbond.source-detect.dockerfile-subdir | 识别子目录中的 Dockerfile | active | regression | builder/parser/code.GetLangType | builder/parser/code/language_matrix_test.go::TestGetLangType_DetectsDockerfileInSubDirectory | | rainbond.source-detect.hidden-dockerfiles | 识别隐藏目录中的 Dockerfile | active | regression | builder/parser/code.FindDockerfiles | builder/parser/code/lang_test.go::TestFindDockerfilesInHiddenDirs | | rainbond.source-detect.ignore-excluded-dirs | 扫描 Dockerfile 时忽略排除目录 | active | regression | builder/parser/code.FindDockerfiles | builder/parser/code/lang_test.go::TestFindDockerfilesIgnoreSpecificDirs | | rainbond.source-detect.language-matrix | 识别支持的源码构建语言矩阵 | active | regression | builder/parser/code.GetLangType | builder/parser/code/language_matrix_test.go::TestGetLangType_SupportedSourceBuildLanguages | | rainbond.source-detect.multi-module-dockerfile | Preserve Dockerfile detection for Maven modules | active | regression | builder/parser.SourceCodeParse.GetServiceInfo | builder/parser/source_code_args_test.go::TestGetServiceInfo_MultiModulesPreserveDockerfileDetection | | rainbond.source-detect.nodejs-over-static | 存在 package.json 时优先识别为 Node.js | active | regression | builder/parser/code.GetLangType | builder/parser/code/language_matrix_test.go::TestGetLangType_NodeJsWinsOverStaticWhenPackageJsonExists | | rainbond.source-discovery.etcd-config | 配置 parser 的 etcd 发现器并在无客户端时保护抓取逻辑 | active | regression | builder/parser/discovery.NewEtcd | builder/parser/discovery/etcd_test.go::TestNewEtcdAndFetchGuard | | rainbond.source-discovery.unsupported-type | 对不支持的 parser 发现类型返回空发现器 | active | regression | builder/parser/discovery.NewDiscoverier | builder/parser/discovery/discovery_unit_test.go::TestNewDiscoverierUnsupportedType | | rainbond.source-image.auth-base64-encode | 将镜像仓库认证信息编码为 base64 JSON 载荷 | active | regression | builder/sources.EncodeAuthToBase64 | builder/sources/image_test.go::TestEncodeAuthToBase64 | | rainbond.source-image.import | 从归档文件导入镜像 | active | integration | builder/sources.ImageImport | builder/sources/image_test.go::TestImageImport | | rainbond.source-image.multi-save | 将多个镜像保存为归档文件 | active | integration | builder/sources.MultiImageSave | builder/sources/image_test.go::TestMulitImageSave | | rainbond.source-image.parse-name | 解析镜像仓库主机名镜像名与标签 | active | regression | builder/sources.ImageNameHandle | builder/sources/image_test.go::TestImageName | | rainbond.source-image.parse-name-with-namespace | 解析带显式仓库命名空间的镜像引用 | active | regression | builder/sources.ImageNameWithNamespaceHandle | builder/sources/image_test.go::TestImageNameWithNamespace | | rainbond.source-image.save | 将镜像保存为归档文件 | active | integration | builder/sources.ImageSave | builder/sources/image_test.go::TestImageSave | | rainbond.source-image.tag-from-ref | 从规范化镜像引用中提取标签 | active | regression | builder/sources.GetTagFromNamedRef | builder/sources/registry_test.go::TestGetTagFromNamedRef | | rainbond.source-image.trusted-registry-check | 校验受信任的镜像仓库 | active | integration | builder/sources.CheckTrustedRepositories | builder/sources/image_test.go::TestCheckTrustedRepositories | | rainbond.source-image.vm-build-host-taint-toleration | 为绑定主机的 VM 构建 Pod 添加通配容忍 | active | regression | builder/sources.newBuildKitPodSpec | builder/sources/image_test.go::TestNewBuildKitPodSpecAddsTolerationForHostScheduling | | rainbond.source-repo.build-info | 构建包含净化地址与构建子目录的仓库元数据 | active | regression | builder/sources.CreateRepostoryBuildInfo | builder/sources/repo_test.go::TestCreateRepostoryBuildInfo | | rainbond.source-repo.cache-dir | 根据仓库分支租户与服务解析源码缓存目录 | active | regression | builder/sources.GetCodeSourceDir | builder/sources/file_test.go::TestGetCodeSourceDirUsesSourceDirEnv
builder/sources/git_test.go::TestGetCodeCacheDir | | rainbond.source-repo.clone | 克隆 Git 源码仓库 | active | integration | builder/sources.GitClone | builder/sources/git_test.go::TestGitClone | | rainbond.source-repo.clone-by-tag | 按标签克隆 Git 源码仓库 | active | integration | builder/sources.GitClone | builder/sources/git_test.go::TestGitCloneByTag | | rainbond.source-repo.git-ref-name | 将分支和标签输入映射为 git 引用名 | active | regression | builder/sources.getBranch | builder/sources/git_test.go::TestGetBranch | | rainbond.source-repo.https-proxy | 通过标准代理拉取 HTTPS Git 仓库 | active | regression | builder/sources.newGitCloneHTTPClient | builder/sources/git_test.go::TestNewGitCloneHTTPClientProxy | | rainbond.source-repo.pull | 拉取 Git 源码仓库 | active | integration | builder/sources.GitPull | builder/sources/git_test.go::TestGitPull | | rainbond.source-repo.pull-or-clone | 拉取或克隆 Git 源码仓库 | active | integration | builder/sources.GitCloneOrPull | builder/sources/git_test.go::TestGitPullOrClone | | rainbond.source-repo.show-url | 从仓库展示地址中去除凭据 | active | regression | builder/sources.getShowURL | builder/sources/git_test.go::TestGetShowURL | | rainbond.source-repo.temp-build-info | 为源码任务创建独立的临时仓库工作目录 | active | regression | builder/sources.CreateTempRepostoryBuildInfo | builder/sources/repo_test.go::TestCreateTempRepostoryBuildInfo | | rainbond.source-repo.temp-build-info-pkg | 为 pkg 构建创建临时工作目录信息时保持原始路径 | active | regression | builder/sources.CreateTempRepostoryBuildInfo | builder/sources/repo_test.go::TestCreateTempRepostoryBuildInfoForPkg | | rainbond.source-sftp.close-safe | 安全关闭零值 SFTP 客户端 | active | regression | builder/sources.SFTPClient.Close | builder/sources/sftp_test.go::TestSFTPClientCloseZeroValue | | rainbond.source-sftp.port-parse | 解析 SFTP 端口并提供合理默认值 | active | regression | builder/sources.parseSFTPPort | builder/sources/sftp_test.go::TestParseSFTPPort | | rainbond.source-svn.branch-path | 解析 SVN 分支标签与 trunk 的目标路径 | active | regression | builder/sources.getBranchPath | builder/sources/svn_test.go::TestGetBranchPath | | rainbond.storage.chunk-cleanup-confirmation | Require complete scoped S3 chunk deletion acknowledgements | active | regression | storage.S3Storage.CleanupChunks | pkg/component/storage/chunk_cleanup_s3_test.go::TestChunkCleanupRequiresCompleteScopedAcknowledgements | | rainbond.storage.chunk-size-inventory | Measure complete scoped S3 upload chunk sizes | active | regression | S3Storage.MeasureUploadChunks | pkg/component/storage/chunk_inventory_test.go::TestUploadChunkUsageRequiresCompletePhysicalInventory | | rainbond.storage.class-summary | 汇总存储类信息 | active | regression | api/handler.StorageClassInfo | api/handler/storage_test.go::TestStorageClassInfoFields | | rainbond.storage.handler-singleton | 复用存储处理器单例 | active | unit | api/handler.GetStorageHandler | api/handler/storage_test.go::TestGetStorageHandlerSingleton | | rainbond.storage.local-chunk-size-inventory | Measure local upload chunks without following symbolic links | active | regression | LocalStorage.MeasureUploadChunks | pkg/component/storage/chunk_inventory_test.go::TestLocalUploadChunkUsageReadsFilesWithoutFollowingLinks | | rainbond.storage.minio-chunk-cleanup | Delete all owned MinIO upload chunks while preserving a sibling session | active | integration | storage.S3Storage.CleanupChunks | pkg/component/storage/chunk_cleanup_minio_test.go::TestMinIOChunkCleanupOwnsExactSession | | rainbond.storage.no-credential-startup-logs | Never print storage access or secret keys at startup | active | regression | storage.Component.Start | pkg/component/storage/credential_logging_test.go::TestStorageStartupDoesNotLogCredentials | | rainbond.storage.s3-lifecycle-skip-logs | S3 生命周期已配置时不再输出 info 日志 | active | regression | pkg/component/storage.(*S3Storage).ensureBucketLifecycle | pkg/component/storage/s3_storage_test.go::TestEnsureBucketExistsDoesNotLogInfoWhenLifecycleAlreadyConfigured | | rainbond.storage.upload-chunk-binding | Bind native chunk storage without exposing credentials | active | regression | Component.UploadChunkBinding | pkg/component/storage/upload_binding_test.go::TestUploadStorageBindingChangesWithTargetWithoutExposingCredentials | | rainbond.storage.upload-package-size | Measure scoped upload packages including extracted files | active | regression | storage.MeasureUploadEvent | pkg/component/storage/upload_package_inventory_test.go::TestUploadPackageSizeIsScopedAndIncludesExtractedFiles
pkg/component/storage/upload_package_inventory_test.go::TestS3UploadPackageMeasurementUsesExactEventPrefix | | rainbond.tenant-resources.skip-unused-cluster-scans | Skip cluster scans when tenant limit records are complete | active | regression | api/handler.TenantAction.GetTenantsResources | api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesWithLimitsSkipsClusterReads
api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesWithLimitsDoesNotWaitForClusterCache
api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesMissingLimitsUsesOneClusterFallback
api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesEmptyIDsSkipsDownstreamCalls
api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesPreservesDAOErrors
api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesPreservesZeroFallbackAfterKubernetesFailure | | rainbond.third-component.endpoint-address-construct | 构造并校验第三方组件端点地址 | active | regression | pkg/apis/rainbond/v1alpha1.NewEndpointAddress | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestNewEndpointAddress | | rainbond.third-component.endpoint-address-ip | 解析端点 IP 与域名哨兵地址 | active | regression | pkg/apis/rainbond/v1alpha1.EndpointAddress.GetIP | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressGetIP | | rainbond.third-component.endpoint-address-port | 从第三方组件端点地址中解析有效端口 | active | regression | pkg/apis/rainbond/v1alpha1.EndpointAddress.GetPort | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressGetPort | | rainbond.third-component.endpoint-address-scheme | 为第三方组件端点地址补齐默认 HTTP 协议 | active | regression | pkg/apis/rainbond/v1alpha1.EndpointAddress.EnsureScheme | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressEnsureScheme | | rainbond.third-component.handler-equals | 比较第三方组件处理器在不同探测模式下的相等性 | active | regression | pkg/apis/rainbond/v1alpha1.Handler.Equals | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestHandlerEquals | | rainbond.third-component.http-get-equals | 比较 HTTP 探测处理器及其请求头集合 | active | regression | pkg/apis/rainbond/v1alpha1.HTTPGetAction.Equals | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestHTTPGetActionEquals | | rainbond.third-component.identity-fields | 暴露第三方组件身份与端点标识辅助函数 | active | regression | pkg/apis/rainbond/v1alpha1.ThirdComponent.GetEndpointID | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentIdentityHelpers | | rainbond.third-component.legacy-endpoint-port | 拆分旧式第三方组件端点的主机与端口对 | active | regression | pkg/apis/rainbond/v1alpha1.ThirdComponentEndpoint.GetPort | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentEndpointGetPortAndIP | | rainbond.third-component.probe-equals | 比较第三方组件探测定义是否相等 | active | regression | pkg/apis/rainbond/v1alpha1.Probe.Equals | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestProbeEquals | | rainbond.third-component.probe-required | 判断第三方组件是否需要主动探测 | active | regression | pkg/apis/rainbond/v1alpha1.ThirdComponentSpec.NeedProbe | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentSpecNeedProbe | | rainbond.third-component.static-endpoints-detect | 检测第三方组件是否使用静态端点 | active | regression | pkg/apis/rainbond/v1alpha1.ThirdComponentSpec.IsStaticEndpoints | pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentSpecIsStaticEndpoints | | rainbond.upgrade-configmap-aggregates-create-update-errors | Aggregate ConfigMap create/update errors during upgrade | active | regression | worker/appm/controller.upgradeController.upgradeConfigMap | worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapErrorAggregation | | rainbond.upgrade-service-aggregates-create-update-errors | Aggregate Service create/update errors during upgrade | active | regression | worker/appm/controller.upgradeController.upgradeService | worker/appm/controller/upgrade_test.go::TestUpgradeServiceErrorAggregation | | rainbond.util.array-deduplicate | 对字符串切片去重并保留非空元素 | active | regression | util.Deweight | util/comman_test.go::TestDeweight | | rainbond.util.bytes-equality | 比较字节切片是否完全相等并区分 nil 情况 | active | regression | util.BytesSliceEqual | util/bytes_test.go::TestBytesSliceEqual | | rainbond.util.bytes-to-string | 使用零拷贝辅助将字节切片转换为字符串 | active | regression | util.ToString | util/bytes_test.go::TestToString | | rainbond.util.core-helpers.hash-ip-string-uuid | 覆盖哈希IP字符串反转与时间版本等核心辅助行为 | active | regression | util.CreateFileHash | util/hash_test.go::TestCreateFileHash
util/ip_test.go::TestCheckIP
util/string_test.go::TestReverse
util/uuid_test.go::TestTimeVersion | | rainbond.util.core-helpers.hash-string | 从原始字符串生成稳定的 md5 哈希 | active | regression | util.CreateHashString | util/hash_test.go::TestCreateHashString | | rainbond.util.core-helpers.string-contains | 检查字符串切片中的成员是否存在 | active | regression | util.StringArrayContains | util/string_test.go::TestStringArrayContains | | rainbond.util.current-dir-path | 返回规范化的当前工作目录路径 | active | regression | util.GetCurrentDir | util/comman_test.go::TestGetCurrentDir | | rainbond.util.dir-list-depth | 按目标深度列出嵌套目录 | active | regression | util.GetDirList | util/comman_test.go::TestGetDirList | | rainbond.util.dir-name-list | 按目标深度列出目录名称 | active | regression | util.GetDirNameList | util/comman_test.go::TestGetDirNameList | | rainbond.util.dir-size-shell | 使用 shell du 命令计算目录大小 | active | regression | util.GetDirSizeByCmd | util/comman_test.go::TestGetDirSizeByCmd | | rainbond.util.dir-size-walk | 通过递归遍历文件计算目录大小 | active | regression | util.GetDirSize | util/comman_test.go::TestGetDirSize | | rainbond.util.env-default | 在环境变量为空时返回默认值 | active | regression | util.GetenvDefault | util/comman_test.go::TestGetenvDefault | | rainbond.util.etcd-key-id-parse | 从 etcd 风格键中提取稳定 ID | active | regression | util.GetIDFromKey | util/comman_test.go::TestGetIDFromKey | | rainbond.util.file-copy | 复制文件并保留内容与元数据 | active | regression | util.CopyFile | util/comman_test.go::TestCopyFile | | rainbond.util.file-list-depth | 按目标深度递归列出文件 | active | regression | util.GetFileList | util/comman_test.go::TestGetFileList | | rainbond.util.fs.archive-and-directory-ops | 处理文件创建复制归档合并遍历与目录大小辅助操作 | active | regression | util.OpenOrCreateFile | util/comman_test.go::TestOpenOrCreateFile | | rainbond.util.fuzzy.find | 在候选列表中查找模糊匹配 | active | unit | util/fuzzy.Find | util/fuzzy/fuzzy_test.go::TestFind | | rainbond.util.fuzzy.find-fold | 在候选列表中按大小写不敏感方式查找模糊匹配 | active | regression | util/fuzzy.FindFold | util/fuzzy/fuzzy_test.go::TestFindFold | | rainbond.util.fuzzy.levenshtein-distance | 计算字符串之间的 Levenshtein 编辑距离 | active | regression | util/fuzzy.LevenshteinDistance | util/fuzzy/levenshtein_test.go::TestLevenshteinDistance | | rainbond.util.fuzzy.match | 模糊匹配单个候选字符串 | active | unit | util/fuzzy.Match | util/fuzzy/fuzzy_test.go::TestMatch | | rainbond.util.fuzzy.match-fold | 执行大小写不敏感的模糊子序列匹配 | active | regression | util/fuzzy.MatchFold | util/fuzzy/fuzzy_test.go::TestMatchFold | | rainbond.util.fuzzy.rank-find | 对候选列表中的模糊匹配结果排序 | active | unit | util/fuzzy.RankFind | util/fuzzy/fuzzy_test.go::TestRankFind | | rainbond.util.fuzzy.rank-find-fold | 按编辑距离对大小写不敏感的模糊匹配结果排序 | active | regression | util/fuzzy.RankFindFold | util/fuzzy/fuzzy_test.go::TestRankFindFold | | rainbond.util.fuzzy.rank-match | 按删除距离为模糊匹配结果打分 | active | regression | util/fuzzy.RankMatch | util/fuzzy/fuzzy_test.go::TestRankMatch | | rainbond.util.getenv | 返回显式环境变量值或后备默认值 | active | regression | util.Getenv | util/comman_test.go::TestGetenv | | rainbond.util.host-id-generate | 根据机器状态生成稳定的主机标识 | active | regression | util.CreateHostID | util/comman_test.go::TestCreateHostID | | rainbond.util.network.interface-address-filter | 在网卡地址扫描中过滤回环与非 IP 地址 | active | regression | util.checkIPAddress | util/ippool_test.go::TestCheckIPAddress | | rainbond.util.prober.manage-service-health-watchers | 管理探测状态 watcher 并分发健康更新 | active | regression | util/prober.probeManager.handleStatus | util/prober/manager_test.go::TestProbeManager_Start | | rainbond.util.ssh.auth-method-selection | 选择 SSH 鉴权方式并拒绝不支持的认证模式 | active | regression | util.NewSSHClient | util/sshclient_test.go::TestNewSSHClientSelectsAuthMethod | | rainbond.util.statefulset-suffix-detect | 检测状态组件名称中的数字后缀 | active | regression | util.IsEndWithNumber | util/comman_test.go::TestIsEndWithNumber | | rainbond.util.string-to-bytes | 使用辅助函数将字符串转换为字节切片 | active | regression | util.ToByte | util/bytes_test.go::TestToByte | | rainbond.util.system.identity-and-template-helpers | 提供主机标识版本当前目录变量替换与时间格式化辅助能力 | active | regression | util.CreateHostID | util/comman_test.go::TestDeweight | | rainbond.util.template-variable-parse | 根据配置映射展开带默认值的模板变量 | active | regression | util.ParseVariable | util/comman_test.go::TestParseVariable | | rainbond.util.termtables.render-bool-cell | 渲染布尔表格单元格 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderBool | | rainbond.util.termtables.render-cell-padding | 按配置填充表格单元格 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderPadding | | rainbond.util.termtables.render-float-cell | 渲染浮点表格单元格 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderFloat | | rainbond.util.termtables.render-generic-cell | 渲染通用表格单元格值 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderGeneric | | rainbond.util.termtables.render-html-alignment | 渲染带显式对齐的 HTML 表格 | active | unit | util/termtables.Table.RenderHTML | util/termtables/html_test.go::TestTableWithAlignment | | rainbond.util.termtables.render-html-alt-title-style | 以替代标题样式渲染 HTML 表格 | active | unit | util/termtables.Table.SetHTMLStyleTitle | util/termtables/html_test.go::TestTableWithAltTitleStyle | | rainbond.util.termtables.render-html-set-align | 将 SetAlign 应用于 HTML 表格渲染 | active | unit | util/termtables.Table.SetAlign | util/termtables/html_test.go::TestTableAfterSetAlign | | rainbond.util.termtables.render-html-table | 渲染带标题与对齐能力的 HTML 表格输出 | active | regression | util/termtables.Table.Render | util/termtables/html_test.go::TestCreateTableHTML | | rainbond.util.termtables.render-html-title | 渲染带标题的 HTML 表格 | active | unit | util/termtables.Table.RenderHTML | util/termtables/html_test.go::TestTableWithHeaderHTML | | rainbond.util.termtables.render-html-title-width | 按宽度展开 HTML 表格标题 | active | unit | util/termtables.Table.RenderHTML | util/termtables/html_test.go::TestTableTitleWidthAdjustsHTML | | rainbond.util.termtables.render-html-unicode-widths | 渲染带 Unicode 宽度的 HTML 表格 | active | unit | util/termtables.Table.RenderHTML | util/termtables/html_test.go::TestTableUnicodeWidthsHTML | | rainbond.util.termtables.render-html-without-headers | 渲染无表头的 HTML 表格 | active | unit | util/termtables.Table.RenderHTML | util/termtables/html_test.go::TestTableWithNoHeadersHTML | | rainbond.util.termtables.render-integer-cell | 渲染整数表格单元格 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderInteger | | rainbond.util.termtables.render-markdown-table | 渲染 Markdown 表格输出 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableInMarkdown | | rainbond.util.termtables.render-row-width-padding | 按列宽填充渲染后的表格行 | active | unit | util/termtables.Row.Render | util/termtables/row_test.go::TestRowRenderWidthBasedPadding | | rainbond.util.termtables.render-stringer-cell | 渲染 Stringer 表格单元格 | active | unit | util/termtables.Cell.Render | util/termtables/cell_test.go::TestCellRenderStringerStruct | | rainbond.util.termtables.render-text-table | 渲染带宽度与 Unicode 处理的终端与 Markdown 表格 | active | regression | util/termtables.Table.Render | util/termtables/table_test.go::TestCreateTable
util/termtables/cell_test.go::TestCellRenderString
util/termtables/row_test.go::TestBasicRowRender | | rainbond.util.termtables.render-text-table-append-headers | 在多次 AddHeaders 调用中追加表头 | active | unit | util/termtables.Table.AddHeaders | util/termtables/table_test.go::TestTableMultipleAddHeader | | rainbond.util.termtables.render-text-table-cjk | 渲染含 CJK 字符的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestCJKChars | | rainbond.util.termtables.render-text-table-header-width | 按表头宽度扩展文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableHeaderWidthAdjusts | | rainbond.util.termtables.render-text-table-missing-cells | 渲染缺失尾部单元格的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableMissingCells | | rainbond.util.termtables.render-text-table-post-align | 在添加行后应用列对齐 | active | unit | util/termtables.Table.SetAlign | util/termtables/table_test.go::TestTableAlignPostsetting | | rainbond.util.termtables.render-text-table-repeatable | 重复渲染时保持表头一致 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWithHeaderMultipleTimes | | rainbond.util.termtables.render-text-table-style-reset | 将表格样式重置为 ASCII 渲染 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestStyleResets | | rainbond.util.termtables.render-text-table-title-unicode-width | 按 Unicode 宽度渲染文本表格标题 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTitleUnicodeWidths | | rainbond.util.termtables.render-text-table-title-width | 按标题宽度扩展文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableTitleWidthAdjusts | | rainbond.util.termtables.render-text-table-unicode-widths | 渲染带 Unicode 宽度的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableUnicodeWidths | | rainbond.util.termtables.render-text-table-utf8-box | 使用 UTF-8 边框渲染文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableInUTF8 | | rainbond.util.termtables.render-text-table-utf8-sgr | 渲染带终端颜色控制序列的 UTF-8 文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableUnicodeUTF8AndSGR | | rainbond.util.termtables.render-text-table-width-balance | 在多行之间平衡文本表格宽度 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWidthHandling | | rainbond.util.termtables.render-text-table-width-balance-second | 处理第二类文本表格宽度平衡场景 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWidthHandling_SecondErrorCondition | | rainbond.util.termtables.render-text-table-with-combining-chars | 渲染含组合字符的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWithCombiningChars | | rainbond.util.termtables.render-text-table-with-fullwidth-chars | 渲染含全角字符的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWithFullwidthChars | | rainbond.util.termtables.render-text-table-with-title | 渲染带标题的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWithHeader | | rainbond.util.termtables.render-text-table-without-headers | 渲染无表头的文本表格 | active | unit | util/termtables.Table.Render | util/termtables/table_test.go::TestTableWithNoHeaders | | rainbond.util.termtables.strip-color-codes | 移除单元格内容中的 ANSI 颜色码 | active | unit | util/termtables.filterColorCodes | util/termtables/cell_test.go::TestFilterColorCodes | | rainbond.util.time-format-rfc3339 | 将解析后的时间格式化为 RFC3339 字符串 | active | regression | time.Format | util/comman_test.go::TestTimeFormat | | rainbond.util.version-timestamp | 生成基于时间戳的版本字符串 | active | regression | util.CreateVersionByTime | util/comman_test.go::TestCreateVersionByTime | | rainbond.util.whitespace-filter | 从字符串切片中过滤空白与仅空格项 | active | regression | util.RemoveSpaces | util/comman_test.go::TestRemoveSpaces | | rainbond.util.zip-archive | 将目录归档为 zip 文件 | active | regression | util.Zip | util/comman_test.go::TestZip | | rainbond.util.zip-structure-detect | 检测 zip 归档是否共享公共根目录 | active | regression | util.detectZipStructure | util/comman_test.go::TestDetectZipStructure | | rainbond.version.commit-message-utf8 | 版本提交信息安全截断并完成构建入库 | active | regression | VersionInfoDaoImpl.AddModel/UpdateModel | db/mysql/dao/version_commit_msg_test.go::TestTruncateVersionCommitMsg
db/mysql/dao/version_commit_msg_test.go::TestTruncateVersionCommitMsgMalformedInputDoesNotPanic
db/mysql/dao/version_commit_msg_test.go::TestVersionCommitMsgPersistence
db/mysql/dao/version_commit_msg_test.go::FuzzTruncateVersionCommitMsg | | rainbond.vm-build.buildkit-startup-retry | 增加虚拟机 BuildKit 启动等待次数 | active | regression | builder/sources.buildctlConnectRetriesMax | builder/sources/image_test.go::TestBuildctlConnectRetriesMaxUsesLongerDefaultForVMBuild
builder/sources/image_test.go::TestBuildctlConnectRetriesMaxPreservesExplicitEnv | | rainbond.vm-build.retain-failed-build-pod | 保留失败的虚拟机构建 Pod 便于诊断 | active | regression | builder/sources.shouldRetainFailedBuildKitJob | builder/sources/image_test.go::TestShouldRetainFailedBuildKitJobByDefault
builder/sources/image_test.go::TestShouldRetainFailedBuildKitJobCanBeDisabled | | rainbond.vm-config-file-injected-as-configmap-volume | 将 VM 配置文件卷注入为 guest 可见的 ConfigMap 配置盘 | active | regression | worker/appm/volume.ConfigFileVolume.CreateVolume | worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateVolumeForVMBuildsGuestVisibleConfigDisk | | rainbond.vm-export.root-disk-url | 创建 VMExport 并返回系统盘下载地址 | active | regression | api/handler.VMExportHandler | api/handler/vm_export_test.go::TestCreateVMExport
api/handler/vm_export_test.go::TestGetVMExport | | rainbond.vm-hotplug.add-volume-conflict-retry | 热添加虚拟机磁盘时在冲突后重试 | active | regression | api/handler.ServiceAction.hotplugVMDataDisk | api/handler/service_vm_hotplug_test.go::TestPerformVMHotplugAddVolumeRetriesConflicts | | rainbond.vm-hotplug.data-volume-capacity-gi | 使用 Gi 容量创建虚拟机热插数据卷 | active | regression | api/handler.buildVMHotplugDataVolumeObject | api/handler/service_vm_hotplug_test.go::TestBuildVMHotplugDataVolumeObjectUsesGiCapacity | | rainbond.vm-hotplug.remove-volume-running-vm | 删除存储时热移除运行中虚拟机的数据磁盘 | active | regression | api/handler.ServiceAction.VolumnVar | api/handler/service_vm_hotplug_test.go::TestHotunplugVMDataDiskRemovesVolumeFromRunningVM
api/handler/service_vm_hotplug_test.go::TestHotunplugVMDataDiskDeletesBackingDataVolumeAndPVC
api/handler/service_vm_hotplug_test.go::TestVolumnVarDeleteHotunplugsRunningVMDataDisk | | rainbond.vm-import.registry-datavolume | 通过 registry DataVolume 导入虚拟机系统盘 | active | regression | worker/appm/volume.BuildVMDataVolumeTemplate | worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplate
worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplateAddsDockerSchemeWhenMissing
worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplatePrefixesInternalRegistryForShortImage | | rainbond.vm-import.registry-reference-validation | Reject malformed VM registry image references | active | regression | worker/appm/volume.normalizeVMRegistryImportURL | worker/appm/volume/vm_import_test.go::TestNormalizeVMRegistryImportURLRejectsInvalidReference | | rainbond.vm-import.validation-aborts-vm-definition | Abort VM definition for invalid registry imports | active | regression | worker/appm/conversion.createVolumes | worker/appm/conversion/version_vm_import_test.go::TestCreateVolumesRejectsInvalidVMRegistryImport | | rainbond.vm-live-update.capability-requires-installer-media-removal | 初始化安装光盘未删除时屏蔽热更新能力 | active | regression | api/handler.ServiceAction.GetVMLiveUpdateCapability | api/handler/service_vm_live_update_test.go::TestGetVMLiveUpdateCapabilityRejectsWhenInstallerMediaStillAttached | | rainbond.vm-live-update.capability-requires-migration-target | 无可用迁移目标节点时屏蔽热更新能力 | active | regression | api/handler.ServiceAction.GetVMLiveUpdateCapability | api/handler/service_vm_live_update_test.go::TestGetVMLiveUpdateCapabilityRejectsWhenNoMigrationTargetNode | | rainbond.vm-live-update.cpu-memory-combined-rejected | 拒绝运行中虚拟机同时热更新 CPU 和内存 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsCombinedCPUAndMemoryChange | | rainbond.vm-live-update.installer-media-removal-required | 初始化安装光盘未删除时拒绝虚拟机热更新 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsWhenInstallerMediaStillAttached | | rainbond.vm-live-update.memory-target-below-max-guest | 拒绝等于 maxGuest 的虚拟机内存热更新目标 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMMemoryAtMaxGuest | | rainbond.vm-live-update.migration-target-missing-auto-restart | 无可用迁移目标节点时自动调整规格并重启虚拟机 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRestartsWhenNoMigrationTargetNode | | rainbond.vm-live-update.running-cpu-shrink-rejected | Reject running VM CPU shrink during live update | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMCPUShrink | | rainbond.vm-live-update.running-memory-shrink-rejected | 拒绝运行中虚拟机的内存热缩容 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMMemoryShrink | | rainbond.vm-live-update.running-shrink-restart-allowed-before-event | 运行中虚拟机缩容允许进入垂直伸缩流程 | active | regression | api/middleware.WrapEL | api/middleware/middleware_test.go::TestWrapELAllowsRunningVMShrinkToReachHandler | | rainbond.vm-live-update.unsupported-auto-restart | 不满足热更新条件时自动调整规格并重启虚拟机 | active | regression | api/handler.ServiceAction.applyVMLiveUpdateIfPossible | api/handler/service_vm_live_update_test.go::TestServiceVerticalVMNonMigratableFallsBackToSpecSyncAndRestart
api/handler/service_vm_live_update_test.go::TestServiceVerticalVMPatchMigrationErrorFallsBackToSpecSyncAndRestart | | rainbond.vm-pods.cleanup-completed-virt-launcher | 虚拟机热更新后清理已完成的 virt-launcher Pod | active | regression | api/handler.ServiceAction.GetPods | api/handler/service_vm_pod_cleanup_test.go::TestGetPodsCleansUpCompletedVMLauncherPodsAfterHotUpdate | | rainbond.vm-power.direct-ops-event-close | 在同步执行 KubeVirt 虚拟机电源操作后闭环事件状态 | active | regression | api/handler direct VM power operations | api/handler/service_vm_power_test.go::TestStartOrCreateVMMarksDirectStartEventSuccess
api/handler/service_vm_power_test.go::TestStartOrCreateVMMarksDirectStartEventFailure
api/handler/service_vm_power_test.go::TestRestartVMMarksDirectRestartEventSuccess
api/handler/service_vm_power_test.go::TestStopVMMarksDirectStopEventSuccess | | rainbond.vm-power.start-existing-or-create | 优先启动已存在且已停止的虚拟机,否则回退到 worker 创建流程 | active | regression | api/handler.ServiceAction.StartOrCreateVM | api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingStoppedVM
api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingStoppedVMWhenSpecSyncFindsMissingRootImport
api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsStoppedAlwaysRunStrategyVM
api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingVMWithUnknownPrintableStatus
api/handler/service_vm_power_test.go::TestStartOrCreateVMFallsBackToWorkerStartWhenVMIsMissing | | rainbond.vm-power.stop-restoring-fallback | Fallback to halt transient VM when direct stop fails | active | regression | api/handler.ServiceAction.StopVM | api/handler/service_vm_power_test.go::TestStopVMFallsBackToHaltingProvisioningVMWhenDirectStopFails | | rainbond.vm-probe-attribute-syncs-spec | VM probe attributes trigger VirtualMachine spec sync | active | regression | api/handler.isVMRuntimeSpecAttribute | api/handler/k8s_attribute_vm_runtime_test.go::TestIsVMRuntimeSpecAttributeIncludesProbeAttributes | | rainbond.vm-probe-change-syncs-spec | VM probe changes sync VirtualMachine spec | active | regression | api/handler.ServiceAction.ServiceProbe | api/handler/service_vm_resource_sync_test.go::TestServiceProbeSyncsVirtualMachineSpecWhenVMProbeChanges | | rainbond.vm-publish.http-artifact-image-build | 将导出的虚拟机磁盘构建为 HTTP 制品镜像 | active | regression | builder/exector.BuildFromVM | api/handler/share/service_share_test.go::TestServiceShareVMImageSourceSkipsDeliveredPathReferenceValidation
builder/exector/build_from_vm_test.go::TestRenderVMDockerfileUsesHTTPArtifactForGzipRawExport
builder/exector/build_from_vm_test.go::TestDownloadFileUsesVMExportTokenHeader
builder/exector/build_from_vm_test.go::TestDownloadFileOverwritesExistingPartialFile
builder/exector/build_from_vm_test.go::TestVMRemoteImageSourceDirUsesEventID
builder/exector/build_from_vm_test.go::TestMyDownloaderLogsUnknownSizeProgress
builder/exector/share_image_test.go::TestNewImageShareItemCapturesVMImageSource
builder/sources/image_test.go::TestBuildKitImageOutputUsesUncompressedLayersForVMBuild
builder/sourceutil/remote_http_client_test.go::TestNewRemotePackageHTTPClientSkipsTLSVerifyForVMExportService | | rainbond.vm-publish.stage-timing-logs | Trace VM publish stage timing logs | active | regression | builder/exector.VMBuildItem.RunVMBuild | builder/exector/build_from_vm_test.go::TestRecordVMBuildStageLogsSuccess
builder/exector/build_from_vm_test.go::TestRecordVMBuildStageLogsError
builder/sources/image_test.go::TestRecordImageBuildStageLogsFields
builder/sources/image_test.go::TestRecordImageBuildStageLogsError | | rainbond.vm-run.build-media-paths | 拆分 ISO 与磁盘镜像的 VM 运行时构建模板路径 | active | regression | builder/exector.renderVMDockerfile | builder/exector/build_from_vm_test.go::TestResolveVMBuildMediaDistinguishesISOAndDiskImages | | rainbond.vm-run.local-package-storage-download | vm-run 本地包源在目录缺失时回退 storage 下载 | active | regression | builder/sourceutil.ReadLocalPackageDir | builder/sourceutil/local_package_test.go::TestReadLocalPackageDirFallsBackToStorageDownload | | rainbond.vm-run.remote-package-probe | vm-run 远程包探测优先使用 HEAD | active | regression | builder/parser.VMServiceParse.Parse | builder/parser/vm_service_test.go::TestVMServiceParseRemoteURLPrefersHeadProbe | | rainbond.vm-run.remote-package-probe-range-fallback | vm-run 远程包探测在 HEAD 失败时回退 Range GET | active | regression | builder/parser.VMServiceParse.Parse | builder/parser/vm_service_test.go::TestVMServiceParseRemoteURLFallsBackToRangeGet | | rainbond.vm-runtime-spec-sync-conflict-retry | Retry VM spec sync when KubeVirt update conflicts | active | regression | github.com/goodrain/rainbond/api/handler.(*ServiceAction).syncVirtualMachineSpec | api/handler/k8s_attribute_vm_runtime_test.go::TestSyncVirtualMachineSpecRetriesOnConflict | | rainbond.vm-runtime.disk-layout-attr-triggers-spec-sync | 将 vm_disk_layout 视为触发 VM 规格同步的属性 | active | regression | api/handler.isVMRuntimeSpecAttribute | api/handler/k8s_attribute_vm_runtime_test.go::TestIsVMRuntimeSpecAttributeIncludesDiskLayout | | rainbond.vm-template-import.registry-restore-progress | 暴露 registry 虚拟机 DataVolume 导入进度 | active | regression | api/handler.vmRestoreDataVolumeNames | api/handler/service_vm_status_test.go::TestResolveVMDataVolumeRestoreIncludesRegistryImportDataVolumes | | rainbond.vm-template-import.restore-progress | Expose VM template import restore progress | active | unit | api/handler.resolveVMDataVolumeRestoreStatus | api/handler/service_vm_status_test.go::TestResolveVMRestoreStatusIncludesDataVolumeProgress
api/handler/service_vm_status_test.go::TestResolveVMRestoreStatusMarksAllDataVolumesSucceeded
api/handler/service_vm_status_test.go::TestResolveVMDataVolumeRestoreIgnoresInitialBlankDataVolumes | | rainbond.vm-template-import.status-restoring | VM restore status is limited to artifact imports | active | unit | api/handler.resolveVMServiceRuntimeStatus | api/handler/service_vm_status_test.go::TestResolveVMTransitionStatusReturnsStartingForDataVolumeImportWithoutRestoreContext
api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsRestoringWhenArtifactDataVolumeImportsBeforeVMIExists
api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsStartingForInitialBlankDataVolume
api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsStartingForInitialHTTPDataVolume
api/handler/service_vm_status_test.go::TestResolveVMTransitionStatusReturnsAbnormalForDataVolumeError | | rainbond.vm-volume-selected-storage-class | 为 VM 数据卷保留所选存储类 | active | regression | worker/appm/volume.ShareFileVolume.CreateVolume | worker/appm/volume/share_file_vm_test.go::TestNewVolumeManagerUsesSelectedStorageClassForVMDisks | | rainbond.vm-volume-vm-file-backward-compatible | 旧版 vm-file 虚机卷继续回退到 local-path | active | regression | worker/appm/volume.ShareFileVolume.CreateVolume | worker/appm/volume/share_file_vm_test.go::TestShareFileVolumeVMStorageClassFallsBackToLocalPathForLegacyVMFile | | rainbond.vm-volume.allow-shared-device-paths | 允许 VM 服务在不同数据卷间复用设备路径 | active | regression | db/mysql/dao.TenantServiceVolumeDaoImpl.AddModel | db/mysql/dao/tenant_service_volume_vm_test.go::TestTenantServiceVolumeDaoAddModelAllowsDuplicateVMDevicePath | | rainbond.volume-dependency.precise-delete | 仅删除指定提供方的挂载关系 | active | regression | api/handler.ServiceAction.VolumeDependency | api/handler/service_volume_dependency_test.go::TestVolumeDependencyDeleteUsesConsumerProviderAndVolumeName
db/mysql/dao/tenant_service_mount_relation_test.go::TestTenantServiceMountRelationDaoDeletesOnlyRequestedProviderVolume | | rainbond.volume.keep-non-vm-path-uniqueness | 保持非 VM 服务卷路径唯一性校验 | active | regression | db/mysql/dao.TenantServiceVolumeDaoImpl.AddModel | db/mysql/dao/tenant_service_volume_vm_test.go::TestTenantServiceVolumeDaoAddModelRejectsDuplicatePathForNonVMService | | rainbond.watch.error-dispatch | 将 watch 后端错误分发到内部错误通道 | active | regression | util/watch.watchChan.sendError | util/watch/watch_test.go::TestWatchChanSendError | | rainbond.watch.error-parse | 将 watch 后端错误转换为 API 错误事件 | active | regression | util/watch.parseError | util/watch/watch_test.go::TestParseError | | rainbond.watch.etcd-event-parse | 将 etcd watch 事件解析为内部事件结构 | active | regression | util/watch.parseEvent | util/watch/watch_test.go::TestParseEvent | | rainbond.watch.event-accessors | 为 watch 事件暴露键与载荷访问器 | active | regression | util/watch.Event.GetKey | util/watch/watch_test.go::TestEventAccessors | | rainbond.watch.event-byte-accessors | 为 watch 事件暴露原始字节载荷访问器 | active | regression | util/watch.Event.GetValue | util/watch/watch_test.go::TestEventByteAccessors | | rainbond.watch.event-dispatch | 将底层 watch 事件分发到输入事件通道 | active | regression | util/watch.watchChan.sendEvent | util/watch/watch_test.go::TestWatchChanSendEvent | | rainbond.watch.event-type-transform | 将底层 watch 事件转换为 Added/Modified/Deleted 结果 | active | regression | util/watch.watchChan.transform | util/watch/watch_test.go::TestWatchChanTransform | | rainbond.watch.resource-version-parse | 将 watch 资源版本解析为 etcd 修订号 | active | regression | util/watch.ParseWatchResourceVersion | util/watch/watch_test.go::TestParseWatchResourceVersion | | rainbond.watch.status-error-format | 将 watch 状态错误格式化为稳定字符串 | active | regression | util/watch.Status.Error | util/watch/watch_test.go::TestStatusError | | rainbond.watch.synthetic-create-event | 将初始 etcd 键值转换为合成创建事件 | active | regression | util/watch.parseKV | util/watch/watch_test.go::TestParseKVMarksCreateEvent | | rainbond.webcli.auth-signature | 生成稳定的 WebSocket 鉴权 MD5 摘要 | active | regression | api/webcli/app.md5Func | api/webcli/app/app_test.go::TestMD5Func | | rainbond.webcli.completed-pod-guard | 拒绝对已完成 Pod 建立 exec 会话 | active | regression | api/webcli/app.App.GetContainerArgs | api/webcli/app/app_test.go::TestGetContainerArgsRejectsCompletedPod | | rainbond.webcli.config-defaults | 为 WebCLI 请求补齐 Kubernetes REST 客户端默认配置 | active | regression | api/webcli/app.SetConfigDefaults | api/webcli/app/app_test.go::TestSetConfigDefaults | | rainbond.webcli.container-args | 为 WebCLI 会话解析执行容器Pod IP与命令参数 | active | regression | api/webcli/app.App.GetContainerArgs | api/webcli/app/app_test.go::TestGetContainerArgsSelectsContainerAndExecArgs | | rainbond.webcli.max-width | 限制 WebCLI 终端输出最大宽度 | active | regression | api/webcli/term.NewMaxWidthWriter | api/webcli/term/term_writer_test.go::TestMaxWidthWriter | | rainbond.webcli.missing-container-guard | 请求的容器不存在时拒绝建立 exec 会话 | active | regression | api/webcli/app.App.GetContainerArgs | api/webcli/app/app_test.go::TestGetContainerArgsRejectsMissingContainer | | rainbond.webcli.terminal-resize | 为 WebCLI 执行会话排队并应用终端尺寸变更 | active | regression | api/webcli/app.execContext.ResizeTerminal | api/webcli/app/tty_test.go::TestResizeTerminalQueuesWindowSize | | rainbond.webcli.word-wrap | 按单词折行 WebCLI 终端输出 | active | regression | api/webcli/term.NewWordWrapWriter | api/webcli/term/term_writer_test.go::TestWordWrapWriter | | rainbond.worker.app-status-no-unused-component-query | 单应用状态避免无用组件查询且保留资源及Helm行为 | active | regression | worker/server.RuntimeServer.GetAppStatus | worker/server/app_status_query_test.go::TestGetAppStatusSkipsUnusedComponentRead
worker/server/app_status_query_test.go::TestGetAppStatusPreservesHelmStatusAndErrors | | rainbond.worker.appm.autoscaler.build-hpa-spec | 根据自动伸缩规则构建 HPA 指标与对象 | active | regression | worker/appm/conversion.newHPA | worker/appm/conversion/autoscaler_test.go::TestNewHPA | | rainbond.worker.appm.discovery.etcd-config | 配置 appm 的 etcd 发现器并在无客户端时保护抓取逻辑 | active | regression | worker/appm/thirdparty/discovery.NewEtcd | worker/appm/thirdparty/discovery/etcd_test.go::TestNewEtcdAndFetchGuard | | rainbond.worker.appm.discovery.unsupported-type | 对不支持的 appm 发现后端返回错误 | active | regression | worker/appm/thirdparty/discovery.NewDiscoverier | worker/appm/thirdparty/discovery/discovery_unit_test.go::TestNewDiscoverierUnsupportedType | | rainbond.worker.appm.gateway.reassign-conflicting-nodeport | Reassign worker TCP NodePorts already allocated in Kubernetes | active | regression | worker/appm/conversion.reassignAllocatedNodePort | worker/appm/conversion/gateway_test.go::TestReassignAllocatedNodePort
worker/appm/conversion/gateway_test.go::TestReassignAllocatedNodePortKeepsCurrentServicePort | | rainbond.worker.appm.gateway.vm-nodeport-service-uses-local-external-traffic-policy | Use Local externalTrafficPolicy for VM worker NodePort services | active | regression | worker/appm/conversion.outerServiceExternalTrafficPolicy | worker/appm/conversion/gateway_test.go::TestOuterServiceExternalTrafficPolicyForVM
worker/appm/conversion/gateway_test.go::TestOuterServiceExternalTrafficPolicyForNonVM | | rainbond.worker.appm.patch.statefulset-modified-configuration | 根据新旧工作负载规格计算允许的 StatefulSet Patch 内容 | active | regression | worker/appm/types/v1.getStatefulsetModifiedConfiguration | worker/appm/types/v1/patch_test.go::TestGetStatefulsetModifiedConfiguration | | rainbond.worker.appm.store.aggregate-app-status | 将组件运行状态汇总为应用状态 | active | regression | worker/appm/store.getAppStatus | worker/appm/store/store_test.go::TestGetAppStatus | | rainbond.worker.appm.store.skip-managed-tcp-nodeport-reservation | 跳过 Rainbond 管理的 TCP 路由匿名端口预留 | active | regression | worker/appm/store.shouldTrackNodePortService | worker/appm/store/store_test.go::TestShouldTrackNodePortService | | rainbond.worker.appm.store.stateful-volume-capacity-reconciliation | New StatefulSet claims converge to stored capacity without recreating workloads | active | regression | appRuntimeStore.OnAdd | worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionOnClaimEvents
worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionRetriesAfterDatabaseCommit
worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionRetriesFailuresAndConflicts
worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionSkipsUnsupportedOrForeignClaims
worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionAcceptsManualVolumeLabel | | rainbond.worker.appm.store.sync-managed-namespace-image-pull-secret | 在命名空间事件中同步受管命名空间的镜像拉取密钥 | active | regression | worker/appm/store.appRuntimeStore.nsEventHandler | worker/appm/store/store_test.go::TestNsEventHandlerProvidesAddFunc | | rainbond.worker.appm.vm-boot-media-paths | 拆分 ISO 与 QCOW2 的 VM 启动介质组装路径 | active | regression | worker/appm/conversion.TenantServiceVersion | worker/appm/conversion/version_vm_test.go::TestResolveVMBootPathUsesISOInstallerWhenRootDiskIsBlank
worker/appm/conversion/version_vm_test.go::TestApplyVMBootVolumeLayoutDropsInstallerVolumeWhenDiskLayoutRemovesIt | | rainbond.worker.appm.vm-container-disk-cdrom | VM container disk CD-ROM media | active | regression | worker/appm/conversion.appendVMContainerDiskCDROMs | worker/appm/conversion/vm_runtime_test.go::TestBuildVMDiskLayoutKeepsContainerDiskImage
worker/appm/conversion/vm_runtime_test.go::TestAppendVMContainerDiskCDROMsCreatesContainerDiskVolumeAndDisk | | rainbond.worker.appm.vm-default-interface-virtio | 所有虚拟机统一使用 VirtIO 网络接口 | active | regression | worker/appm/conversion.resolveVMInterfaceModel | worker/appm/conversion/vm_runtime_test.go::TestBuildVMRuntimeConfigRandomNetwork
worker/appm/conversion/vm_runtime_test.go::TestBuildVMRuntimeConfigRandomWindowsNetworkUsesVirtio | | rainbond.worker.appm.vm-memory-hotplug-headroom | 默认虚拟机内存热插拔上限预留 | active | regression | worker/appm/conversion.buildStandardVMMemory | worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemorySetsGuestAndMaxGuest
worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemoryAlignsGuestMemoryToTwoMi
worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemoryUsesFourTimesGuestAboveFloor | | rainbond.worker.bounded-mq-health-check | Worker 消息队列健康检查超时与并发保护 | active | regression | worker/discover.HealthCheckContext | worker/discover/health_test.go::TestHealthCheckReturnsPromptlyWhenMQIsHealthy
worker/discover/health_test.go::TestHealthCheckUsesOneDeadlineForEnqueueAndDequeue
worker/discover/health_test.go::TestHealthCheckBoundsBackgroundCaller
worker/discover/health_test.go::TestHealthCheckStopsOnCallerCancellation
worker/discover/health_test.go::TestHealthCheckCoalescesConcurrentProbes
worker/discover/health_test.go::TestHealthCheckCanceledWaiterDoesNotStartAnotherRoundTrip
worker/discover/health_test.go::TestHealthCheckRejectsFailedOrEmptyRoundTrips
worker/discover/health_test.go::TestHealthCheckRecoversAfterTransientMQFailure
worker/discover/health_test.go::TestHealthCheckCanceledRoundTripDoesNotCacheFailure
worker/discover/health_test.go::TestHealthCheckContextReportsMissingMQ | | rainbond.worker.config-group-component-isolation | Isolate rendered application configuration by component | active | regression | worker/appm/conversion.createEnv | worker/appm/conversion/configgroup_test.go::TestConfigGroupComponentIsolation | | rainbond.worker.conversion.cmd-args-yaml | Parse component cmd and args attributes as YAML arrays | active | regression | worker/appm/conversion.getMainContainer | api/handler/k8s_attribute_test.go::TestUpdateK8sAttributeUpdatesSaveType
worker/appm/conversion/version_cmd_args_test.go::TestParseStringSequenceAttribute | | rainbond.worker.conversion.daemonset-workload | 根据组件类型创建 DaemonSet 工作负载 | active | regression | worker.appm.conversion.TenantServiceBase | worker/appm/conversion/service_daemonset_test.go::TestInitBaseDaemonSetCreatesDaemonSetWorkload | | rainbond.worker.conversion.pod-security-context | 组件 Pod 安全上下文属性 | active | regression | worker.appm.conversion.createPodSecurityContext | worker/appm/conversion/version_security_context_test.go::TestCreatePodSecurityContextUsesK8sAttribute | | rainbond.worker.helmapp.chart-ref | 根据仓库名与模板名拼装 Helm chart 引用 | active | regression | worker/master/controller/helmapp.App.Chart | worker/master/controller/helmapp/unit_test.go::TestAppChart | | rainbond.worker.helmapp.condition-lifecycle | 管理 HelmApp 条件的新增更新与成功态切换 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateConditionStatus | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusConditionLifecycle | | rainbond.worker.helmapp.condition-query | 按类型查询 HelmApp 条件及其真值状态 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppStatus.GetCondition | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusConditionQuery | | rainbond.worker.helmapp.condition-set-noop | 在条件未变化时跳过冗余的 HelmApp 条件写入 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppStatus.SetCondition | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusSetConditionDoesNotDuplicateUnchangedCondition | | rainbond.worker.helmapp.condition-status-default-create | 更新条件状态时自动创建缺失的 HelmApp 条件 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateConditionStatus | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusUpdateConditionStatusCreatesMissingCondition | | rainbond.worker.helmapp.condition-transition-time | 在状态未变化时保留条件的转移时间 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateCondition | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusUpdateConditionPreservesTransitionTimeOnSameStatus | | rainbond.worker.helmapp.detect-required | 判断 HelmApp 是否仍需执行检测 | active | regression | worker/master/controller/helmapp.App.NeedDetect | worker/master/controller/helmapp/unit_test.go::TestAppNeedDetect | | rainbond.worker.helmapp.detected-prerequisites | 判断 HelmApp 检测前置条件是否已经满足 | active | regression | worker/master/controller/helmapp.Status.isDetected | worker/master/controller/helmapp/unit_test.go::TestStatusGetPhase | | rainbond.worker.helmapp.envtest-suite | 启动 HelmApp envtest 集成测试套件 | active | integration | worker/master/controller/helmapp.BeforeSuite | worker/master/controller/helmapp/suite_test.go | | rainbond.worker.helmapp.finalizer-stop | 通过关闭队列停止 HelmApp finalizer | active | regression | worker/master/controller/helmapp.Finalizer.Stop | worker/master/controller/helmapp/store_unit_test.go::TestFinalizerStop | | rainbond.worker.helmapp.install-and-deploy | 通过控制循环安装并部署 Helm 应用 | active | integration | worker/master/controller/helmapp.ControlLoop | worker/master/controller/helmapp/controlloop_test.go | | rainbond.worker.helmapp.overrides-compare | 按无序方式比较 HelmApp 期望与已生效的 overrides | active | regression | pkg/apis/rainbond/v1alpha1.HelmApp.OverridesEqual | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppOverridesEqual | | rainbond.worker.helmapp.phase-derive | 根据条件与前置状态推导 HelmApp 阶段 | active | regression | worker/master/controller/helmapp.Status.getPhase | worker/master/controller/helmapp/unit_test.go::TestStatusGetPhase | | rainbond.worker.helmapp.preserve-current-spec | Preserve current HelmApp image intent during setup | active | regression | helmapp.App.UpdateSpec | worker/master/controller/helmapp/spec_defaults_test.go::TestHelmAppSpecDefaultsPreserveCurrentReferences | | rainbond.worker.helmapp.queue-key-parse | 将 HelmApp 队列键拆分为名称与命名空间片段 | active | regression | worker/master/controller/helmapp.nameNamespace | worker/master/controller/helmapp/unit_test.go::TestNameNamespace | | rainbond.worker.helmapp.reconcile-configuring-phase | 协调 Helm 应用进入配置阶段 | active | integration | worker/master/controller/helmapp.ControlLoop | worker/master/controller/helmapp/controlloop_test.go | | rainbond.worker.helmapp.reconcile-default-values | 协调 Helm 应用默认值 | active | integration | worker/master/controller/helmapp.ControlLoop | worker/master/controller/helmapp/controlloop_test.go | | rainbond.worker.helmapp.reconcile-start-detecting | 协调 Helm 应用进入检测阶段 | active | integration | worker/master/controller/helmapp.ControlLoop | worker/master/controller/helmapp/controlloop_test.go | | rainbond.worker.helmapp.setup-required | 判断 HelmApp 是否仍需初始化默认配置 | active | regression | worker/master/controller/helmapp.App.NeedSetup | worker/master/controller/helmapp/unit_test.go::TestAppNeedSetup | | rainbond.worker.helmapp.store-fetch | 从控制器 store lister 获取 HelmApp 对象 | active | regression | worker/master/controller/helmapp.store.GetHelmApp | worker/master/controller/helmapp/store_unit_test.go::TestStoreGetHelmApp | | rainbond.worker.helmapp.store-full-name | 根据 EID 与商店名构建完整应用商店名称 | active | regression | pkg/apis/rainbond/v1alpha1.HelmAppSpec.FullName | pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppSpecFullName | | rainbond.worker.helmapp.update-required | 判断已配置 HelmApp 是否需要安装或更新 | active | regression | worker/master/controller/helmapp.App.NeedUpdate | worker/master/controller/helmapp/unit_test.go::TestAppNeedUpdate | | rainbond.worker.patch.daemonset-upgrade | DaemonSet 升级补丁生成 | active | regression | worker.appm.types.v1.AppService.SetUpgradePatch | worker/appm/types/v1/patch_test.go::TestSetUpgradePatchCreatesDaemonSetPatch | | rainbond.worker.pod-status.describe | 根据条件容器状态与事件归类 Pod 状态 | active | regression | worker/util.DescribePodStatus | worker/util/pod_test.go::TestDescribePodStatus | | rainbond.worker.status.daemonset | DaemonSet 运行状态计算 | active | regression | worker.appm.types.v1.AppService.GetServiceStatus | worker/appm/types/v1/status_test.go::TestGetServiceStatusReturnsRunningForReadyDaemonSet
worker/appm/types/v1/status_test.go::TestGetServiceStatusReturnsAbnormalForUnschedulableDaemonSetPod | | rainbond.worker.thirdcomponent.prober.execute-endpoint-probe | 执行第三方组件端点探测并映射结果 | active | regression | worker/master/controller/thirdcomponent/prober.prober.probe | worker/master/controller/thirdcomponent/prober/prober_test.go::TestProbe | | rainbond.worker.thirdcomponent.prober.manage-results-cache | 缓存并清理第三方组件探测结果 | active | regression | worker/master/controller/thirdcomponent/prober/results.NewManager | worker/master/controller/thirdcomponent/prober/results/results_manager_test.go::TestCacheOperations | | rainbond.worker.volume-provider.pvc-identifiers | 根据 PVC 名称解析 Pod 名与卷 ID | active | regression | worker/master/volumes/provider.getVolumeIDByPVCName | worker/master/volumes/provider/rainbondsslc_test.go::TestGetVolumeIDByPVCName | | rainbond.worker.volume-provider.select-node | 按可用内存选择存储节点 | active | integration | worker/master/volumes/provider.rainbondsslcProvisioner.selectNode | worker/master/volumes/provider/rainbondsslc_test.go::TestSelectNode | | rainbond.worker.volume-type.from-storageclass | 将存储类转换为 Rainbond 卷类型 | active | regression | worker/util.TransStorageClass2RBDVolumeType | worker/util/volumetype_test.go::TestTransStorageClass2RBDVolumeType
db/mysql/dao/volume_type_test.go::TestShouldBackfillStorageClassAccessMode | ## 详情 ### Use Local externalTrafficPolicy for VM NodePort services - Capability ID: `rainbond.api-gateway.vm-nodeport-service-uses-local-external-traffic-policy` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api.controller.apigateway.Struct.CreateTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteSetsExternalTrafficPolicyLocalForVMService` ### Collect missing API server request counters through existing rbd-api metrics - Capability ID: `rainbond.api.apiserver-request-metrics` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/metric.NewAPIServerCollector` - 代码路径: `api/metric/apiserver.go`, `api/server/api.go`, `api/client/prometheus/prometheus.go` - 测试路径: `api/metric/apiserver_test.go`, `api/client/prometheus/prometheus_timeout_test.go::TestGetMetricHonorsCallerDeadline`, `api/client/prometheus/prometheus_timeout_test.go::TestGetMetricCallerContextPreservesSuccessfulResults` ### KubeBlocks adapter service namespace - Capability ID: `rainbond.api.kubeblocks.adapter-service-namespace` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/controller.KubeBlocksController.forwardRequest` - 代码路径: `api/controller/kubeblocks.go` - 测试路径: `api/controller/kubeblocks_test.go::TestKubeBlocksAdapterBaseURLUsesPluginNamespace` ### KubeBlocks backup repo mutation proxy - Capability ID: `rainbond.api.kubeblocks.backup-repo-mutation-proxy` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/controller.KubeBlocksController.CreateBackupRepo` - 代码路径: `api/controller/kubeblocks.go` - 测试路径: `api/controller/kubeblocks_test.go::TestKubeBlocksBackupRepoMutationProxy` ### 识别旧版与新版应用备份元数据结构 - Capability ID: `rainbond.app-backup.metadata-version-detect` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.judgeMetadataVersion` - 代码路径: `builder/exector/groupapp_backup.go` - 测试路径: `builder/exector/groupapp_backup_test.go::TestJudgeMetadataVersion` ### 将服务卷数据归档为备份包 - Capability ID: `rainbond.app-backup.service-volume-archive` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPNew.backupServiceInfo` - 代码路径: `builder/exector/groupapp_backup.go` - 测试路径: `builder/exector/groupapp_backup_test.go::TestBackupServiceVolume` ### 将应用备份包上传到外部存储 - Capability ID: `rainbond.app-backup.upload-package` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPNew.uploadPkg` - 代码路径: `builder/exector/groupapp_backup.go` - 测试路径: `builder/exector/groupapp_backup_test.go::TestUploadPkg` ### 在备份包上传流程中保护已移除的下载接口 - Capability ID: `rainbond.app-backup.upload-package-download-guard` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPNew.uploadPkg` - 代码路径: `builder/exector/groupapp_backup.go` - 测试路径: `builder/exector/groupapp_backup_test.go::TestUploadPkg2` ### 根据环境变量解析本地与共享备份卷目录 - Capability ID: `rainbond.app-backup.volume-dir-defaults` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.GetVolumeDir` - 代码路径: `builder/exector/groupapp_backup.go` - 测试路径: `builder/exector/groupapp_backup_test.go::TestGetVolumeDir` ### 将组件绑定到应用配置组 - Capability ID: `rainbond.app-config-group.bind-component` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupServiceDaoImpl.AddModel` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestAppConfigGroupServiceDaoAddModel` ### 创建应用配置组记录 - Capability ID: `rainbond.app-config-group.create` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupDaoImpl.AddModel` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestAppConfigGroupDaoAddModel` ### 删除应用配置组记录 - Capability ID: `rainbond.app-config-group.delete` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupDaoImpl.DeleteConfigGroup` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroup` ### 查询应用配置组记录 - Capability ID: `rainbond.app-config-group.get` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupDaoImpl.GetConfigGroupByID` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestAppGetConfigGroupByID` ### 创建应用配置项 - Capability ID: `rainbond.app-config-group.item-create` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupItemDaoImpl.AddModel` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestAppConfigGroupItemDaoAddModel` ### 删除应用配置项 - Capability ID: `rainbond.app-config-group.item-delete` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupItemDaoImpl.DeleteConfigGroupItem` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroupItem` ### 更新应用配置项 - Capability ID: `rainbond.app-config-group.item-update` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupItemDaoImpl.UpdateModel` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestAppConfigGroupItemDaoUpdateModel` ### Preserve configuration bindings before component creation - Capability ID: `rainbond.app-config-group.pending-component-bindings` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ApplicationAction.AddConfigGroup/UpdateConfigGroup` - 代码路径: `api/handler/application_config_group.go`, `worker/appm/conversion/configgroup.go` - 测试路径: `api/handler/application_config_group_test.go::TestConfigGroupRetainsPendingComponentBindings` ### 移除应用配置组组件绑定 - Capability ID: `rainbond.app-config-group.unbind-components` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.AppConfigGroupServiceDaoImpl.DeleteConfigGroupService` - 代码路径: `db/mysql/dao/application_config_group.go` - 测试路径: `db/mysql/dao/application_config_group_test.go::TestDeleteConfigGroupService` ### 从 Linux 文件名还原导入镜像包名 - Capability ID: `rainbond.app-import.package-name-normalize` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.buildFromLinuxFileName` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestBuildFromLinuxFileName` ### Return imported image push errors during app import - Capability ID: `rainbond.app-import.propagate-image-push-error` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.ensureImportedImagesPushed` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestEnsureImportedImagesPushedReturnsPushError` ### Return app import task errors to the import worker - Capability ID: `rainbond.app-import.propagate-task-error` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.runImportAppTasks` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestRunImportAppTasksReturnsTaskError` ### 导入应用时保留旧版伸缩规则 - Capability ID: `rainbond.app-import.scaling-rule-compat` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.normalizeImportedRAM` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestNormalizeImportedRAMPreservesLegacyScalingRule` ### 序列化并解析按应用记录的导入状态 - Capability ID: `rainbond.app-import.status-serialization` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.map2str` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestAppStatusMapRoundTrip` ### Wait for imported component and plugin images to be pushed - Capability ID: `rainbond.app-import.wait-image-push` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.ensureImportedImagesPushed` - 代码路径: `builder/exector/import_app.go` - 测试路径: `builder/exector/import_app_test.go::TestEnsureImportedImagesPushedPushesComponentsAndPluginsOnce` ### 应用恢复时重写镜像仓库地址 - Capability ID: `rainbond.app-restore.image-registry-rewrite` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.getNewImageName` - 代码路径: `builder/exector/groupapp_restore.go` - 测试路径: `builder/exector/groupapp_restore_test.go::TestGetImageName` ### 从恢复后的服务映射中反查原始服务 ID - Capability ID: `rainbond.app-restore.service-id-lookup` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPRestore.getOldServiceID` - 代码路径: `builder/exector/groupapp_restore.go` - 测试路径: `builder/exector/groupapp_restore_test.go::TestGetOldServiceID` ### 应用恢复时重写服务依赖关系 - Capability ID: `rainbond.app-restore.snapshot-relationship-rewrite` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPRestore.modify` - 代码路径: `builder/exector/groupapp_restore.go` - 测试路径: `builder/exector/groupapp_restore_test.go::TestModify` ### 在恢复时解压完整备份数据包 - Capability ID: `rainbond.app-restore.unzip-all-data` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.BackupAPPRestore` - 代码路径: `builder/exector/groupapp_restore.go` - 测试路径: `builder/exector/groupapp_restore_test.go::TestUnzipAllDataFile` ### Preserve cross-application config-file mounts during upgrade - Capability ID: `rainbond.app-upgrade.cross-app-config-mount` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.SyncComponentVolumeRels` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsPreservesCrossApplicationConfigFileMount`, `api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsRejectsInvalidExternalProviders`, `api/handler/service_sync_volume_relations_test.go::TestSyncComponentVolumeRelsReturnsExternalProviderLookupError` ### 校验应用端口 Kubernetes Service 名称重复 - Capability ID: `rainbond.application.check-port-k8s-service-name-duplicate` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ApplicationAction.checkPorts` - 代码路径: `api/handler/application_handler.go` - 测试路径: `api/handler/application_handler_test.go::TestApplicationActionCheckPortsRejectsDuplicateK8sServiceName` ### Delete config group Secrets with applications - Capability ID: `rainbond.application.delete-config-secrets` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ApplicationAction.deleteApplicationConfigSecrets` - 代码路径: `api/handler/application_handler.go`, `api/handler/application_config_group.go` - 测试路径: `api/handler/application_handler_test.go::TestApplicationActionDeleteApplicationConfigSecrets` ### 按源码语言和构建类型选择构建器 - Capability ID: `rainbond.build.select-builder-by-language` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build.GetBuildByType` - 代码路径: `builder/build/build.go` - 测试路径: `builder/build/build_type_matrix_test.go::TestGetBuildByType_SourceBuildLanguageMatrix` ### Chaos 环境变量控制构建 Pod CPU 和内存 - Capability ID: `rainbond.builder.build-pod-resources` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/job.controller.ExecJob` - 代码路径: `builder/job/job.go`, `builder/job/resources.go` - 测试路径: `builder/job/resources_test.go::TestApplyBuildPodResourcesFromEnv`, `builder/job/resources_test.go::TestApplyBuildPodResourcesRejectsInvalidConfig`, `builder/job/resources_test.go::TestExecJobAppliesResourcesBeforeCreate`, `builder/job/resources_test.go::TestExecJobReusesExistingPodWithoutApplyingResources` ### Dynamic mirror config defaults and env overrides - Capability ID: `rainbond.builder.dynamic-mirror-config` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.LoadConfig` - 代码路径: `builder/mirror/config.go` - 测试路径: `builder/mirror/config_test.go::TestLoadConfigDefaults` ### Fetch mirror candidates from remote JSON source with schema validation - Capability ID: `rainbond.builder.dynamic-mirror-fetch` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.FetchCandidates` - 代码路径: `builder/mirror/fetcher.go` - 测试路径: `builder/mirror/fetcher_test.go::TestFetchCandidates` ### Mirror source fetch falls back to next URL on failure - Capability ID: `rainbond.builder.dynamic-mirror-fetch-fallback` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.FetchCandidates` - 代码路径: `builder/mirror/fetcher.go` - 测试路径: `builder/mirror/fetcher_test.go::TestFetchCandidatesFallsBackToNextURL` ### Probe filters dead mirrors and sorts alive ones by latency - Capability ID: `rainbond.builder.dynamic-mirror-probe` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.Probe` - 代码路径: `builder/mirror/prober.go` - 测试路径: `builder/mirror/prober_test.go::TestProbeFiltersAndSortsByLatency` ### Mirror manager refresh updates list and persists configmap - Capability ID: `rainbond.builder.dynamic-mirror-refresh` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.Manager.Refresh` - 代码路径: `builder/mirror/manager.go` - 测试路径: `builder/mirror/manager_test.go::TestManagerRefreshUpdatesMirrorsAndConfigMap` ### Mirror manager restores last good list from configmap - Capability ID: `rainbond.builder.dynamic-mirror-restore` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/mirror.Manager.restore` - 代码路径: `builder/mirror/manager.go` - 测试路径: `builder/mirror/manager_test.go::TestManagerRestoreFromConfigMap` ### containerd pulls try docker.io mirrors first with upstream fallback - Capability ID: `rainbond.builder.mirror-containerd-hosts` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/sources.mirrorRegistryHosts` - 代码路径: `builder/sources/mirror_hosts.go` - 测试路径: `builder/sources/mirror_hosts_test.go::TestMirrorRegistryHosts` ### docker daemon pulls rewrite docker.io refs to mirrors with fallback order - Capability ID: `rainbond.builder.mirror-docker-ref-rewrite` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/sources.mirrorPullRefs` - 代码路径: `builder/sources/mirror_hosts.go` - 测试路径: `builder/sources/mirror_hosts_test.go::TestMirrorPullRefs` ### Manual REGISTRY_MIRRORS take priority over dynamic mirrors with host dedup - Capability ID: `rainbond.builder.mirror-merge-manual-priority` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/sources.mergeMirrors` - 代码路径: `builder/sources/mirror_merge.go` - 测试路径: `builder/sources/mirror_merge_test.go::TestMergeMirrors` ### 已注册 worker 分发时不再误报未知任务 - Capability ID: `rainbond.builder.registered-worker-dispatch` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.exectorManager.RunTask` - 代码路径: `builder/exector/exector.go` - 测试路径: `builder/exector/exector_test.go::TestRunTaskDoesNotWarnForRegisteredWorker` ### Normalize blank source build types without changing explicit protocols - Capability ID: `rainbond.builder.source-type-compatibility` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.NewSouceCodeBuildItem` - 代码路径: `builder/exector/build_from_sourcecode_run.go` - 测试路径: `builder/exector/source_server_type_test.go::TestNewSourceBuildServerType` ### Rollback and activation cannot reference deleting images - Capability ID: `rainbond.cleanup.activation-registry-coordination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.TrackServiceActivation` - 代码路径: `pkg/cleanup/activation.go`, `pkg/cleanup/store.go` - 测试路径: `pkg/cleanup/activation_coordination_test.go::TestActivationAndRollbackRejectDeletingImage` ### Hold application import admission through metadata publication - Capability ID: `rainbond.cleanup.app-import-admission` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `exector.exec.import_app` - 代码路径: `builder/exector/exector.go`, `builder/exector/import_app.go`, `builder/exector/cleanup_image_admission.go` - 测试路径: `builder/exector/cleanup_import_admission_test.go::TestImportWorkerHoldsAdmissionUntilPublication`, `builder/exector/cleanup_import_admission_test.go::TestImportSuccessWaitsForMetadataUpload` ### Enroll actual cache writer before task consumption - Capability ID: `rainbond.cleanup.cache-builder-startup` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `exector.registerCacheBuilderStartup` - 代码路径: `builder/exector/cleanup_cache_startup.go`, `builder/exector/exector.go`, `pkg/cleanup/kubeidentity/cache_builder.go`, `pkg/cleanup/node_readiness.go`, `pkg/cleanup/participant.go` - 测试路径: `builder/exector/cleanup_cache_startup_test.go::TestCacheStartupRegistersActualInstanceWithoutEnablingDeletion` ### Observe cache storage without enabling legacy writer deletion - Capability ID: `rainbond.cleanup.cache-observation-before-readiness` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectManagedBuildCacheSource` - 代码路径: `pkg/cleanup/kubeidentity/managed_cache.go` - 测试路径: `pkg/cleanup/kubeidentity/managed_cache_test.go::TestReadOnlyCacheEnrollmentDoesNotRequireDeletionReadiness` ### Certify cache readiness only with current membership and no writers - Capability ID: `rainbond.cleanup.cache-writer-certification` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `cleanup.CertifyManagedCacheWriters` - 代码路径: `pkg/cleanup/cache_certification.go` - 测试路径: `pkg/cleanup/cache_certification_test.go::TestCacheCertificationRequiresMembershipAndQuiescence` ### Verify current coordinated writer rollout and detached builds - Capability ID: `rainbond.cleanup.cache-writer-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectCacheWriterCoverage` - 代码路径: `pkg/cleanup/kubeidentity/cache_coverage.go` - 测试路径: `pkg/cleanup/kubeidentity/cache_coverage_test.go::TestCacheCoverageRejectsRollingWritersAndDetachedBuilds` ### Recheck live writer coverage before native deletion grant - Capability ID: `rainbond.cleanup.cache-writer-native-gate` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST node/enter-job` - 代码路径: `api/controller/cleanup_cache_readiness.go`, `api/controller/cleanup_node_launch.go` - 测试路径: `api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce` ### Protect configured executor images across API rollout and rollback - Capability ID: `rainbond.cleanup.configured-node-helper-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.ReadAPIHelperReferences` - 代码路径: `pkg/cleanup/kubeidentity/helper_references.go`, `pkg/cleanup/reference_audit.go`, `api/controller/cleanup_coordination.go` - 测试路径: `pkg/cleanup/reference_audit_test.go::TestConfiguredHelperImagesRemainProtectedWithoutRunningPods`, `pkg/cleanup/kubeidentity/helper_references_test.go::TestAPIHelperReferencesIncludeDesiredRollbackAndRunningImages`, `pkg/cleanup/kubeidentity/helper_references_test.go::TestAPIHelperDoesNotReadSecretBackedEnvironment` ### Use installation-scoped signatures for coordinator requests - Capability ID: `rainbond.cleanup.console-signed-coordinator` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `cleanup.NewConsoleCoordinationClient` - 代码路径: `pkg/cleanup/console_coordination.go` - 测试路径: `pkg/cleanup/console_coordination_test.go::TestConsoleCoordinationUsesScopedSignatureWithoutAdminCredential`, `pkg/cleanup/console_coordination_test.go::TestConsoleCoordinationRejectsUnsafeScopePathsAndDoesNotRetry` ### Run signed coordinator with an independent permit key - Capability ID: `rainbond.cleanup.console-signed-coordinator-runtime` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `registry-coordinator.run` - 代码路径: `cmd/registry-coordinator/main.go`, `cmd/registry-coordinator/credentials.go` - 测试路径: `cmd/registry-coordinator/main_test.go::TestCoordinatorUsesSignedConsoleAndIndependentPermitKey`, `cmd/registry-coordinator/main_test.go::TestSignedCoordinatorRejectsSharedOrMissingPermitKey` ### Authenticate original GC callbacks with installation signatures - Capability ID: `rainbond.cleanup.console-signed-gc-command` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `registry-gc.runGC` - 代码路径: `cmd/registry-gc/main.go` - 测试路径: `cmd/registry-gc/main_test.go::TestGCCommandUsesInstallationSignatureForOriginalReceipt` ### Authenticate Console announcements and bind observed runtime identity - Capability ID: `rainbond.cleanup.console-writer-announcement` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `CleanupCoordinationHandler.RegisterConsoleReferenceWriter` - 代码路径: `api/controller/cleanup_reference_writer.go`, `api/api_routers/version2/v2Routers.go` - 测试路径: `api/controller/cleanup_reference_writer_test.go::TestConsoleWriterAnnouncementRequiresAuthenticationAndObservedIdentity` ### Verify coordinated deletion and separate GC against isolated real Registry - Capability ID: `rainbond.cleanup.coordinated-registry-delete-gc` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `Region coordination API and Registry sidecar` - 代码路径: `pkg/cleanup/registryproxy/coordinator.go`, `api/controller/cleanup_coordination.go` - 测试路径: `api/controller/cleanup_registryproxy_test.go::TestCoordinatedRegistryRealDeletionAndGC` ### Require Region authentication for every coordination route - Capability ID: `rainbond.cleanup.coordination-route-auth` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `/v2/cleanup/stores/{storage_id}/operations` - 代码路径: `api/api_routers/version2/v2Routers.go` - 测试路径: `api/api_routers/version2/cleanup_coordination_test.go::TestCleanupCoordinationRoutesAlwaysRequireRegionAuthentication` ### Run verified readiness and terminate the coordinator cleanly - Capability ID: `rainbond.cleanup.coordinator-runtime` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cmd/registry-coordinator.run` - 代码路径: `cmd/registry-coordinator/main.go` - 测试路径: `cmd/registry-coordinator/main_test.go::TestCoordinatorRunsReadinessAndStopsWithContext` ### Require settled HelmApp intent covered by retained release evidence - Capability ID: `rainbond.cleanup.deferred-helmapp-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.ReadHelmAppReferenceInventory` - 代码路径: `pkg/cleanup/kubeidentity/helmapp_references.go` - 测试路径: `pkg/cleanup/kubeidentity/helmapp_references_test.go::TestHelmAppReferencesRequireSettledRelease` ### Persist coordinated operations across restarts and conflicts - Capability ID: `rainbond.cleanup.durable-coordination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.AcquireOperation` - 代码路径: `pkg/cleanup/coordination.go` - 测试路径: `pkg/cleanup/coordination_test.go::TestPersistentCoordinationConflictsAndRecovery` ### Recover only immutable GC execution evidence without replay - Capability ID: `rainbond.cleanup.durable-gc-receipt` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `registryproxy.RecoverGCReceipt` - 代码路径: `pkg/cleanup/registryproxy/gc_receipt.go`, `pkg/cleanup/registryproxy/gc_executor.go` - 测试路径: `pkg/cleanup/registryproxy/gc_receipt_test.go::TestGCReceiptIsBoundImmutableAndDoesNotPermitReplay` ### Persist GC measurements without releasing maintenance protection - Capability ID: `rainbond.cleanup.durable-maintenance-measurements` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.RecordMaintenanceMeasurement` - 代码路径: `pkg/cleanup/maintenance_measurement.go`, `pkg/cleanup/storage_measurement.go` - 测试路径: `pkg/cleanup/maintenance_measurement_test.go::TestMaintenanceMeasurementsPersistWithoutGrantingRestore` ### Reject admission changes to native executor authority - Capability ID: `rainbond.cleanup.executor-preview-authority` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.sameExecutorPreview` - 代码路径: `pkg/cleanup/executor_preview.go`, `pkg/cleanup/node_job_submit.go`, `pkg/cleanup/gc_job_submit.go` - 测试路径: `pkg/cleanup/node_job_submit_test.go::TestNodeDryRunCannotChangeExecutorIdentity`, `pkg/cleanup/gc_job_submit_test.go::TestGCPreviewCannotInjectLifecycleOrStorage` ### Start a new session instead of resuming expired chunk metadata - Capability ID: `rainbond.cleanup.expired-upload-reinitialize` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `controller.ChunkUploadManager.InitUploadSession` - 代码路径: `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadStartsNewSessionInsteadOfResumingRemovedChunks` ### Retire original expired upload before one-shot chunk deletion and retain recovery evidence - Capability ID: `rainbond.cleanup.expired-upload-retirement` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `DeleteExpiredUploadChunks` - 代码路径: `pkg/cleanup/upload_retirement.go`, `db/model/package_upload_use.go` - 测试路径: `pkg/cleanup/upload_retirement_test.go::TestExpiredUploadDeletionRetiresSessionAndDoesNotReplay`, `pkg/cleanup/upload_retirement_test.go::TestExpiredUploadDeletionRejectsChangedOrActiveEvidence`, `pkg/cleanup/upload_retirement_test.go::TestInterruptedUploadRetirementDoesNotReplayAfterRestart` ### Reject writes and completion on expired upload sessions - Capability ID: `rainbond.cleanup.expired-upload-writes` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `controller.ChunkUploadManager.SaveChunk` - 代码路径: `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadCannotContinueWriting` ### Bind native GC command to the verified Job admission - Capability ID: `rainbond.cleanup.gc-executor-command` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `registry-gc.runGC` - 代码路径: `cmd/registry-gc/main.go` - 测试路径: `cmd/registry-gc/main_test.go::TestGCCommandValidatesBeforeExecutionAndSeparatesRecovery` ### Verify GC pod ownership image and physical volume - Capability ID: `rainbond.cleanup.gc-executor-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectGCExecutor` - 代码路径: `pkg/cleanup/kubeidentity/gc_executor.go` - 测试路径: `pkg/cleanup/kubeidentity/gc_executor_test.go::TestGCExecutorIdentityRejectsUntrustedPodAndStorage` ### Require actual original GC container termination and unchanged source - Capability ID: `rainbond.cleanup.gc-executor-termination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectTerminatedGCExecutor` - 代码路径: `pkg/cleanup/kubeidentity/gc_executor.go`, `pkg/cleanup/kubeidentity/gc_job_template.go` - 测试路径: `pkg/cleanup/kubeidentity/gc_executor_test.go::TestTerminatedGCExecutorRequiresActualOriginalContainerExit`, `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCSourceFingerprintDetectsRuntimeAndConfigurationChanges` ### Cancel failed GC only before execution admission - Capability ID: `rainbond.cleanup.gc-failed-before-admission` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST maintenance/job/cancel-failed` - 代码路径: `api/controller/cleanup_gc_restore.go` - 测试路径: `api/controller/cleanup_gc_failed_test.go::TestFailedGCBeforeAdmissionCanEndMaintenanceWithoutDeletion` ### Grant verified GC Job execution once after writer drain - Capability ID: `rainbond.cleanup.gc-job-execution-api` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST maintenance/enter-job` - 代码路径: `api/controller/cleanup_gc_executor.go`, `pkg/cleanup/gc_executor_client.go`, `pkg/cleanup/registryproxy/gc_recorder.go` - 测试路径: `api/controller/cleanup_gc_executor_test.go::TestGCJobAdmissionAPIRequiresVerifiedExecutorAndGrantsOnce`, `pkg/cleanup/registryproxy/gc_recorder_test.go::TestGCJobRecorderUsesVerifiedGateWithoutFallback` ### Expose only the bound GC operation receipt - Capability ID: `rainbond.cleanup.gc-job-progress` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.ReadGCJobProgress` - 代码路径: `pkg/cleanup/gc_job_progress.go`, `api/controller/cleanup_gc_restore.go` - 测试路径: `pkg/cleanup/gc_job_restore_test.go::TestGCProgressRejectsAnotherOperationIdentity` ### Restore only the original verified GC operation with durable measurements - Capability ID: `rainbond.cleanup.gc-job-restore` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `cleanup.FinishGCJobRestore` - 代码路径: `pkg/cleanup/gc_job_restore.go`, `api/controller/cleanup_gc_restore.go`, `pkg/cleanup/maintenance.go` - 测试路径: `pkg/cleanup/gc_job_restore_test.go::TestGCJobRestoreRequiresOriginalBindingAndMeasurements`, `api/controller/cleanup_gc_executor_test.go::TestGCJobAdmissionAPIRequiresVerifiedExecutorAndGrantsOnce` ### Start the recorded GC Job only after writer drain - Capability ID: `rainbond.cleanup.gc-job-start` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.StartGCJob` - 代码路径: `pkg/cleanup/gc_job_start.go`, `pkg/cleanup/maintenance.go` - 测试路径: `pkg/cleanup/gc_job_start_test.go::TestGCJobStartWaitsForWritersAndNeverReplaysLostStart`, `pkg/cleanup/gc_job_start_test.go::TestGCJobStartRejectsCanceledOperation` ### Persist GC submission and reconcile without replay - Capability ID: `rainbond.cleanup.gc-job-submission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.SubmitSuspendedGCJob` - 代码路径: `pkg/cleanup/gc_job_submit.go`, `pkg/cleanup/gc_job.go` - 测试路径: `pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionPersistsBeforeCreateAndReconcilesLostResponse`, `pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionRejectsUnsafeRetrySettings`, `pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionDefaultingAndMutation`, `pkg/cleanup/gc_job_submit_test.go::TestGCSubmissionCanceledAndDryRunFailureLeaveNoIntent` ### Derive GC Job from verified Registry storage and credential references - Capability ID: `rainbond.cleanup.gc-job-template` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.BuildRegistryGCJob` - 代码路径: `pkg/cleanup/kubeidentity/gc_job_template.go`, `api/controller/cleanup_gc_launch.go` - 测试路径: `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobTemplateUsesObservedStorageAndMountedCredentials`, `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobTemplateRejectsUnsafeSource` ### Reject GC while legacy automatic cleanup is enabled - Capability ID: `rainbond.cleanup.gc-reject-legacy-cleaner` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `BuildRegistryGCJob` - 代码路径: `pkg/cleanup/kubeidentity/legacy_cleanup.go`, `pkg/cleanup/kubeidentity/gc_job_template.go` - 测试路径: `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCJobRejectsLegacyAutomaticCleanup`, `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestGCSourceTracksCleanerProcessButNotStatusHeartbeat` ### Reject generic activation of retired version records - Capability ID: `rainbond.cleanup.generic-activation-fence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.TrackServiceActivation` - 代码路径: `pkg/cleanup/activation.go` - 测试路径: `pkg/cleanup/store_test.go::TestActivationCannotRestoreRetiredTargetThroughGenericSave` ### Coordinate native Helm mutations and track actual Kubernetes write outcomes - Capability ID: `rainbond.cleanup.helm-native-mutation-admission` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `helm.runCoordinatedMutation` - 代码路径: `pkg/helm/cleanup_mutation.go`, `pkg/helm/cleanup_transport.go`, `pkg/helm/helm.go` - 测试路径: `pkg/helm/cleanup_mutation_test.go::TestHelmMutationRequiresDurableProducerAdmission`, `pkg/helm/cleanup_transport_test.go::TestHelmTracksActualReleaseStorageWrites`, `pkg/helm/cleanup_transport_test.go::TestHelmTransportKeepsUncertainWritesAndRejectsUnguardedWrites` ### Keep bounded Helm release identity private to reference correlation - Capability ID: `rainbond.cleanup.helm-release-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.InspectHelmReleaseReferences` - 代码路径: `pkg/cleanup/helm_references.go` - 测试路径: `pkg/cleanup/helm_release_identity_test.go::TestHelmReleaseIdentityDoesNotExposeChartConfiguration` ### Match desired Helm overrides to actual release config digests - Capability ID: `rainbond.cleanup.helm-release-values-proof` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.HelmReleaseMatchesOverrides` - 代码路径: `pkg/cleanup/helm_value_evidence.go` - 测试路径: `pkg/cleanup/helm_release_identity_test.go::TestHelmReleaseOverridesRequireActualConfig` ### Protect retained Helm manifests and hooks without exposing Secret contents - Capability ID: `rainbond.cleanup.helm-retained-reference-inventory` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `cleanup.InspectHelmReleaseReferences` - 代码路径: `pkg/cleanup/helm_references.go`, `pkg/cleanup/kubeidentity/helm_references.go`, `api/controller/cleanup_coordination.go` - 测试路径: `pkg/cleanup/helm_references_test.go::TestHelmRetainedManifestAndHooksProvideReferencesOnly`, `pkg/cleanup/helm_references_test.go::TestHelmCorruptForeignAndUnknownReleasesAreNotEmptySuccess`, `pkg/cleanup/helm_references_test.go::TestHelmReferenceDecompressionIsBounded`, `pkg/cleanup/kubeidentity/helm_references_test.go::TestHelmInventoryReadsOnlyReleaseDataIncludingUnlabelledHistory` ### Protect HelmApp create update and install intents during cleanup - Capability ID: `rainbond.cleanup.helmapp-mutation-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `ApplicationAction.CreateApp` - 代码路径: `api/handler/application_handler.go` - 测试路径: `api/handler/cleanup_helmapp_test.go::TestHelmAppMutationsHoldCleanupAdmission` ### Atomically hand import references to successful versions - Capability ID: `rainbond.cleanup.import_reference_handoff` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `TransferImportedReferencesToVersions` - 代码路径: `pkg/cleanup/reference_handoff.go`, `pkg/cleanup/reference_import.go`, `db/mysql/dao/version.go` - 测试路径: `pkg/cleanup/reference_handoff_test.go::TestImportHandoffWaitsForEverySuccessfulVersionAndRollsBack` ### Bind managed cache enrollment to observed system storage - Capability ID: `rainbond.cleanup.managed-cache-binding` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/managed-cache/prepare` - 代码路径: `pkg/cleanup/kubeidentity/managed_cache.go`, `pkg/cleanup/registration.go`, `api/controller/cleanup_coordination.go` - 测试路径: `pkg/cleanup/kubeidentity/managed_cache_test.go::TestManagedCachePreparationUsesActualNodeAndVolume`, `api/controller/cleanup_coordination_test.go::TestManagedCachePreparationDerivesIdentityAndNeverPromotesReady` ### Managed package roots bind to observed grdata storage - Capability ID: `rainbond.cleanup.managed-package-binding` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectManagedPackageSource` - 代码路径: `pkg/cleanup/kubeidentity/managed_packages.go`, `pkg/cleanup/registration.go` - 测试路径: `pkg/cleanup/kubeidentity/managed_cache_test.go::TestManagedPackagePreparationUsesActualGrdataVolume`, `pkg/cleanup/registration_test.go::TestManagedPackageRegistrationsAreFixedDistinctAndNeverReady` ### Drain writes and require confirmed restoration around manual GC - Capability ID: `rainbond.cleanup.manual-gc-maintenance` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.RequestMaintenance` - 代码路径: `pkg/cleanup/maintenance.go` - 测试路径: `pkg/cleanup/maintenance_test.go::TestMaintenanceDrainsWritersAndRestoresOnlyAfterConfirmation` ### Market slug task waits for completion before returning - Capability ID: `rainbond.cleanup.market-slug-task-completion` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exectorManager.buildFromMarketSlug` - 代码路径: `builder/exector/exector.go` - 测试路径: `builder/exector/cleanup_task_boundary_test.go::TestMarketSlugTaskWaitsForCompletion` ### Image builds hold durable cleanup admission through completion - Capability ID: `rainbond.cleanup.native-image-build-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exectorManager.buildFromImage` - 代码路径: `builder/exector/cleanup_image_admission.go`, `builder/exector/exector.go`, `pkg/cleanup/reference_mutation.go` - 测试路径: `builder/exector/cleanup_image_admission_test.go::TestImageBuildAdmissionBlocksGCAndNeverReplays` ### Persist native builder task identity before queue delivery - Capability ID: `rainbond.cleanup.native-queue-reservation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `mqClient.SendBuilderTopic` - 代码路径: `mq/client/client.go`, `pkg/cleanup/queued_task_kind.go` - 测试路径: `mq/client/cleanup_queue_test.go::TestNativeMQTaskReservesStableIdentityBeforeNetwork`, `mq/client/cleanup_queue_test.go::TestNonNativeMQMessagesKeepExistingDelivery` ### Classify only native ServiceMesh reference schemas - Capability ID: `rainbond.cleanup.native-service-mesh-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.inspectWorkloadObject` - 代码路径: `pkg/cleanup/reference_workloads.go` - 测试路径: `pkg/cleanup/reference_service_mesh_test.go::TestSavedServiceMeshRequiresKnownNativeProvider` ### Cancel only node operations without a native grant - Capability ID: `rainbond.cleanup.node-cancel-before-grant` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.CancelNodeBeforeGrant` - 代码路径: `pkg/cleanup/node_cancel.go`, `api/controller/cleanup_node_launch.go` - 测试路径: `pkg/cleanup/node_cancel_test.go::TestNodeCancellationCannotOverrideNativeAdmission`, `api/controller/cleanup_node_launch_test.go::TestNodeLaunchAPIRechecksSourceBeforeStarting` ### Require idle coordinated storage before showing cache candidates - Capability ID: `rainbond.cleanup.node-candidate-readiness` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.InspectManagedCacheReadiness` - 代码路径: `pkg/cleanup/node_readiness.go` - 测试路径: `pkg/cleanup/node_readiness_test.go::TestNodeReadinessDoesNotIgnoreActiveOperations` ### Admit exactly one observed node executor and verify its termination - Capability ID: `rainbond.cleanup.node-executor-admission` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/enter-job` - 代码路径: `pkg/cleanup/node_execution.go`, `pkg/cleanup/kubeidentity/node_executor.go`, `api/controller/cleanup_node_executor.go` - 测试路径: `pkg/cleanup/node_execution_test.go::TestNodeExecutorAdmissionIsBoundAndSingleUse`, `pkg/cleanup/kubeidentity/node_executor_test.go::TestNodeExecutorRequiresOriginalRuntimeNodeAndMount`, `api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce` ### Authenticated manual inventory preserves deletion protection - Capability ID: `rainbond.cleanup.node-inventory-api` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/managed-cache/inventory` - 代码路径: `api/controller/cleanup_node_inventory.go` - 测试路径: `api/controller/cleanup_node_inventory_test.go::TestInventoryAPIStartsReadOnlyJobWithoutDeletionReadiness` ### Return inventory only from the original verified successful pod - Capability ID: `rainbond.cleanup.node-inventory-report` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.ReadNodeInventoryReport` - 代码路径: `pkg/cleanup/kubeidentity/node_inventory_report.go` - 测试路径: `pkg/cleanup/kubeidentity/node_inventory_report_test.go::TestInventoryReportRequiresOriginalSuccessfulPod` ### Retry manual inventory without duplicating an existing job - Capability ID: `rainbond.cleanup.node-inventory-submission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.RunNodeInventoryJob` - 代码路径: `pkg/cleanup/node_inventory_submit.go` - 测试路径: `pkg/cleanup/node_inventory_submit_test.go::TestInventoryRequestReusesJobAfterLostCreate` ### Read-only cache inventory binds observed storage - Capability ID: `rainbond.cleanup.node-inventory-template` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.BuildManagedCacheInventoryJob` - 代码路径: `pkg/cleanup/kubeidentity/node_inventory_template.go` - 测试路径: `pkg/cleanup/kubeidentity/node_inventory_template_test.go::TestCacheInventoryTemplateUsesObservedReadOnlyStorage` ### Persist immutable node execution identity before job creation - Capability ID: `rainbond.cleanup.node-job-intent` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `PrepareNodeJob` - 代码路径: `pkg/cleanup/node_job.go`, `pkg/cleanup/coordination.go`, `pkg/cleanup/deletion_attempt.go`, `db/model/cleanup_coordination.go` - 测试路径: `pkg/cleanup/node_job_test.go::TestNodeJobIntentIsImmutableAndDoesNotGrantRecreation` ### Launch only the original verified node cleanup job - Capability ID: `rainbond.cleanup.node-job-launch-api` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/submit-job` - 代码路径: `api/controller/cleanup_node_launch.go` - 测试路径: `api/controller/cleanup_node_launch_test.go::TestNodeLaunchAPIRechecksSourceBeforeStarting` ### Start only the original protected node cleanup Job - Capability ID: `rainbond.cleanup.node-job-start` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `StartNodeJob` - 代码路径: `pkg/cleanup/node_job_start.go` - 测试路径: `pkg/cleanup/node_job_start_test.go::TestNodeJobStartChecksProtectionAndReconcilesLostReply` ### Submit one suspended node cleanup Job and reconcile original identity - Capability ID: `rainbond.cleanup.node-job-submission` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `SubmitSuspendedNodeJob` - 代码路径: `pkg/cleanup/node_job_submit.go` - 测试路径: `pkg/cleanup/node_job_submit_test.go::TestNodeSubmissionReconcilesLostCreateWithoutRecreating` ### Bind node cleanup jobs to observed cache and persistent state - Capability ID: `rainbond.cleanup.node-job-template` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.BuildManagedNodeJob` - 代码路径: `pkg/cleanup/kubeidentity/node_job_template.go` - 测试路径: `pkg/cleanup/kubeidentity/node_job_template_test.go::TestNodeJobTemplateBindsCacheAndDurableState` ### Bind original node execution journal to PVC and PV identities - Capability ID: `rainbond.cleanup.node-journal-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectNodeJournalVolume` - 代码路径: `pkg/cleanup/kubeidentity/node_journal.go`, `pkg/cleanup/kubeidentity/node_job_template.go` - 测试路径: `pkg/cleanup/kubeidentity/node_job_template_test.go::TestNodeJobTemplateBindsCacheAndDurableState` ### Recover original node receipt after verified executor exit - Capability ID: `rainbond.cleanup.node-recovery-api` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST node/recover` - 代码路径: `api/controller/cleanup_node_recovery.go` - 测试路径: `api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce` ### Persist recovery intent without changing original native authority - Capability ID: `rainbond.cleanup.node-recovery-binding` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.PrepareNodeRecovery` - 代码路径: `pkg/cleanup/node_recovery.go`, `pkg/cleanup/node_job.go` - 测试路径: `pkg/cleanup/node_recovery_test.go::TestNodeRecoveryIntentIsDurableAndCannotReplaceOriginal` ### Reconcile original recovery Job after lost create response - Capability ID: `rainbond.cleanup.node-recovery-submission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.SubmitSuspendedNodeRecovery` - 代码路径: `pkg/cleanup/node_recovery_submit.go` - 测试路径: `pkg/cleanup/node_recovery_test.go::TestRecoverySubmissionNeverRecreatesAfterLostResponse` ### Build receipt recovery without cache access after verified executor exit - Capability ID: `rainbond.cleanup.node-recovery-template` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.BuildNodeRecoveryJob` - 代码路径: `pkg/cleanup/kubeidentity/node_recovery_template.go` - 测试路径: `pkg/cleanup/kubeidentity/node_recovery_template_test.go::TestNodeRecoveryRequiresOriginalExitAndOmitsCacheVolume` ### Finalize known original node results only after verified executor exit - Capability ID: `rainbond.cleanup.node-result-finalization` - 状态: `active` - 测试类型: `integration` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/node/finish` - 代码路径: `pkg/cleanup/node_result.go`, `api/controller/cleanup_node_executor.go`, `pkg/cleanup/node_executor_client.go` - 测试路径: `pkg/cleanup/node_result_test.go::TestNodeResultIsImmutableAndRequiresExitedOriginalExecutor`, `pkg/cleanup/node_result_test.go::TestNodeResultRejectsInvalidFilesystemEvidence`, `api/controller/cleanup_node_executor_test.go::TestNodeAdmissionAPIUsesKubernetesFactsAndGrantsOnce` ### Reserve package source checks before sending MQ messages - Capability ID: `rainbond.cleanup.package-check-before-enqueue` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `ServiceAction.ServiceCheck` - 代码路径: `api/handler/service_check.go`, `pkg/cleanup/queued_tar.go` - 测试路径: `api/handler/cleanup_queued_tar_test.go::TestServiceCheckReservesOnlyUploadedPackageSources` ### Classify native package checks consistently before enqueue and execution - Capability ID: `rainbond.cleanup.package-check-queue-classification` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `PackageCheckIdentity` - 代码路径: `pkg/cleanup/queued_check.go`, `builder/exector/service_check.go` - 测试路径: `pkg/cleanup/queued_check_test.go::TestPackageChecksUseSharedQueueClassification` ### Observe and bind read-only package inventory subtree independently of cache deletion - Capability ID: `rainbond.cleanup.package-inventory-mount` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `BuildManagedCacheInventoryJob` - 代码路径: `pkg/cleanup/kubeidentity/package_inventory_template.go`, `pkg/cleanup/kubeidentity/node_inventory_template.go`, `pkg/cleanup/kubeidentity/node_inventory_report.go` - 测试路径: `pkg/cleanup/kubeidentity/package_inventory_template_test.go::TestPackageInventoryUsesObservedReadOnlySubtree` ### Drain concurrent upload parts before terminal mutation and preserve uncertain requests - Capability ID: `rainbond.cleanup.package-upload-exclusive-close` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `AcquirePackageUploadRequest` - 代码路径: `pkg/cleanup/package_upload_use.go`, `db/model/package_upload_use.go`, `db/mysql/mysql.go`, `api/controller/cleanup_upload_use.go` - 测试路径: `pkg/cleanup/package_upload_use_test.go::TestPackageUploadCloseDrainsPartsAndRetainsUnknownAcrossRestart`, `pkg/cleanup/package_upload_use_test.go::TestPackageUploadAdmissionChecksFreshSessionAndOriginalRequest`, `api/controller/cleanup_upload_use_test.go::TestNativeUploadCancelCannotOverlapAnActivePart` ### Managed package coverage rejects active builds - Capability ID: `rainbond.cleanup.package-writer-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectManagedPackageWriterCoverage` - 代码路径: `pkg/cleanup/kubeidentity/package_coverage.go` - 测试路径: `pkg/cleanup/kubeidentity/package_coverage_test.go::TestManagedPackageCoverageRejectsBuildsAndChangingRollout` ### Managed package deletion requires current coordinated writers - Capability ID: `rainbond.cleanup.package-writer-readiness` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.CertifyManagedPackageWriters` - 代码路径: `pkg/cleanup/package_certification.go` - 测试路径: `pkg/cleanup/package_certification_test.go::TestManagedPackageReadinessRequiresCurrentWritersAndNoUnfinishedUse` ### Participant replacement preserves active deletion protection - Capability ID: `rainbond.cleanup.participant-replacement` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.RegisterParticipant` - 代码路径: `pkg/cleanup/participant.go`, `pkg/cleanup/deletion_attempt.go` - 测试路径: `pkg/cleanup/participant_test.go::TestParticipantReplacementWithdrawsReadinessWithoutLosingDeletion` ### Include retained tar import and check receipts in reference audits - Capability ID: `rainbond.cleanup.pending-import-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.collectRegionReferenceImages` - 代码路径: `pkg/cleanup/reference_import.go`, `pkg/cleanup/reference_audit.go` - 测试路径: `pkg/cleanup/reference_import_test.go::TestImportedImagesRemainReferencedUntilTheirRecordsAreReleased`, `pkg/cleanup/reference_import_test.go::TestIncompleteImportRecordsCannotProveAbsence`, `pkg/cleanup/reference_import_test.go::TestRejectedAndNonImageChecksDoNotInventReferences` ### Protect default and configured builder and worker helper images - Capability ID: `rainbond.cleanup.platform-future-helper-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.ReadPlatformHelperReferences` - 代码路径: `pkg/cleanup/kubeidentity/platform_helper_references.go`, `pkg/cleanup/kubeidentity/helper_references.go`, `util/constants/helper_images.go`, `builder/build/cnb/config.go`, `builder/exector/build_from_vm.go` - 测试路径: `pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestPlatformDefaultsRemainReferencedWithoutActiveBuilds`, `pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestPlatformHelperOverridesNeverExposeOtherEnvironmentValues`, `pkg/cleanup/kubeidentity/platform_helper_references_test.go::TestBuilderDaemonSetRollbackHelperReferences` ### Protect namespace and cluster resource mutations from concurrent cleanup - Capability ID: `rainbond.cleanup.platform-resource-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `NsResourceHandler.CreateNsResource` - 代码路径: `api/handler/ns_resource.go`, `api/handler/cluster_resource.go` - 测试路径: `api/handler/cleanup_namespace_admission_test.go::TestNamespaceMutationsCannotBypassCleanupAdmission`, `api/handler/cleanup_namespace_admission_test.go::TestClusterMutationsCannotBypassCleanupAdmission` ### Plugin version writes respect selected deletion and cannot resurrect records - Capability ID: `rainbond.cleanup.plugin-version-reference-coordination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `PluginBuildVersionDaoImpl` - 代码路径: `db/mysql/dao/plugin_cleanup.go` - 测试路径: `db/mysql/dao/version_cleanup_test.go::TestPluginVersionWritesRespectDeletionAndNeverResurrect` ### Protect queued producer lifetime and atomically claim once - Capability ID: `rainbond.cleanup.queued-producer-handoff` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `QueueOperation` - 代码路径: `pkg/cleanup/queued_operation.go`, `pkg/cleanup/coordination.go` - 测试路径: `pkg/cleanup/queued_operation_test.go::TestQueuedProducerProtectsWaitingWorkAndClaimsExactlyOnce` ### Claim original queued tar reservation before native execution - Capability ID: `rainbond.cleanup.queued-tar-consumer` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `admitBuild` - 代码路径: `builder/exector/cleanup_image_admission.go`, `pkg/cleanup/queued_tar.go` - 测试路径: `builder/exector/cleanup_image_admission_test.go::TestTarConsumerClaimsOriginalQueueReservation` ### Require complete stable platform writer controller coverage - Capability ID: `rainbond.cleanup.reference-writer-controller-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectReferenceWriterCoverage` - 代码路径: `pkg/cleanup/kubeidentity/reference_writer_coverage.go` - 测试路径: `pkg/cleanup/kubeidentity/reference_writer_coverage_test.go::TestReferenceWriterCoverageRejectsIncompleteRollout` ### Bind reference-writer protocol evidence to immutable running containers - Capability ID: `rainbond.cleanup.reference-writer-runtime-evidence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.RegisterReferenceWriter` - 代码路径: `db/model/cleanup_reference_writer.go`, `pkg/cleanup/reference_writer.go`, `pkg/cleanup/kubeidentity/reference_writer.go` - 测试路径: `pkg/cleanup/reference_writer_test.go::TestReferenceWriterEvidenceIsIndependentAndImmutable`, `pkg/cleanup/kubeidentity/reference_writer_test.go::TestReferenceWriterIdentityUsesActualRuntime` ### Register reference writer runtime evidence at service startup - Capability ID: `rainbond.cleanup.reference-writer-startup` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.RegisterReferenceWriterStartup` - 代码路径: `pkg/cleanup/kubeidentity/reference_writer_startup.go`, `pkg/component/reference_writer.go`, `cmd/api/main.go`, `cmd/worker/worker.go`, `cmd/builder/builder.go` - 测试路径: `pkg/cleanup/kubeidentity/reference_writer_startup_test.go::TestReferenceWriterStartupWaitsForOwnRuntimeOnly` ### Storage discovery rejects incomplete enrollment - Capability ID: `rainbond.cleanup.registered-storage-discovery` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.DiscoverStores` - 代码路径: `pkg/cleanup/discovery.go` - 测试路径: `pkg/cleanup/discovery_test.go::TestDiscoverStoresRejectsIncompleteRegistration` ### Require current registered platform writers in execution reference audit - Capability ID: `rainbond.cleanup.registry-audit-writer-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/registry-references` - 代码路径: `api/controller/cleanup_coordination.go`, `api/controller/cleanup_reference_writers.go` - 测试路径: `api/controller/cleanup_coordination_test.go::TestRegistryReferenceAuditUsesBoundAuthenticatedOperation` ### Derive registry readiness from runtime evidence and quiescence - Capability ID: `rainbond.cleanup.registry-certification` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.CertifyRegistry` - 代码路径: `pkg/cleanup/registry_certification.go` - 测试路径: `pkg/cleanup/registry_certification_test.go::TestRegistryCertificationRequiresCompleteEvidence` ### Bind registry deletion permits to immutable targets and expiry - Capability ID: `rainbond.cleanup.registry-delete-permit` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.VerifyRegistryDeletionPermit` - 代码路径: `pkg/cleanup/deletion_permit.go` - 测试路径: `pkg/cleanup/deletion_permit_test.go::TestRegistryDeletionPermitBindsOriginalTargetAndExpiry` ### Execute native Registry GC once against a verified storage descriptor - Capability ID: `rainbond.cleanup.registry-gc-executor` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `registryproxy.ExecuteGC` - 代码路径: `pkg/cleanup/registryproxy/gc_executor.go` - 测试路径: `pkg/cleanup/registryproxy/gc_executor_test.go::TestGCExecutorDoesNotStartWithoutAdmission`, `api/controller/cleanup_registryproxy_test.go::TestCoordinatedRegistryExecutorRealDeletionAndGC` ### Provision independent platform registry identities without overwrites - Capability ID: `rainbond.cleanup.registry-identity-provision` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `provision_identity.provision` - 代码路径: `hack/contrib/docker/registry-gc/provision_identity.py` - 测试路径: `hack/contrib/docker/registry-gc/provision_identity_test.py` ### Reject registry routes that bypass the coordinator - Capability ID: `rainbond.cleanup.registry-ingress-isolation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/kubeidentity.InspectRegistryIngress` - 代码路径: `pkg/cleanup/kubeidentity/registry_ingress.go` - 测试路径: `pkg/cleanup/kubeidentity/registry_ingress_test.go::TestRegistryIngressRequiresExclusiveCoordinatedRoute` ### Verify actual registry Pod and backing volume identity - Capability ID: `rainbond.cleanup.registry-kubernetes-binding` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/kubeidentity.InspectRegistryMount` - 代码路径: `pkg/cleanup/kubeidentity/registry_mount.go` - 测试路径: `pkg/cleanup/kubeidentity/registry_mount_test.go::TestRegistryMountBindingUsesRealVolumeAndPodIdentity` ### Verify every selected registry ingress against its runtime enrollment - Capability ID: `rainbond.cleanup.registry-participant-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectRegistryParticipantCoverage` - 代码路径: `pkg/cleanup/kubeidentity/registry_participant_coverage.go` - 测试路径: `pkg/cleanup/kubeidentity/registry_participant_test.go::TestParticipantIdentityComesFromCurrentContainerStatus` ### Revalidate current registry coverage before deletion permits - Capability ID: `rainbond.cleanup.registry-permit-fresh-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/stores/{storage_id}/operations/{operation_id}/registry-permit` - 代码路径: `api/controller/cleanup_coordination.go`, `api/controller/cleanup_registry_readiness.go` - 测试路径: `api/controller/cleanup_registry_readiness_test.go::TestRegistryPermitRevalidatesCurrentCoverage` ### Separate registry permit signing from control authentication - Capability ID: `rainbond.cleanup.registry-permit-key-separation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `controller.systemRegistryPermitKey` - 代码路径: `api/controller/cleanup_permit_key.go` - 测试路径: `api/controller/cleanup_permit_key_test.go::TestRegistryPermitKeyUsesDedicatedFileAndNeverFallsBackOnFailure` ### Derive registry identity from controlled inspection without granting cleanup - Capability ID: `rainbond.cleanup.registry-preparation` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `/v2/cleanup/registry/prepare` - 代码路径: `api/controller/cleanup_coordination.go` - 测试路径: `api/controller/cleanup_coordination_test.go::TestRegistryPreparationDerivesIdentityAndNeverPromotesReady` ### Read collecting registry references without granting deletion - Capability ID: `rainbond.cleanup.registry-reference-bootstrap` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.ReadRegionReferenceInventory` - 代码路径: `pkg/cleanup/reference_audit.go` - 测试路径: `pkg/cleanup/reference_audit_test.go::TestReferenceInventoryBootstrapsWithoutGrantingDeletion` ### Reject ambiguous Registry paths and direct blob deletion - Capability ID: `rainbond.cleanup.registry-request-scope` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/registryproxy.ClassifyRequest` - 代码路径: `pkg/cleanup/registryproxy/request.go` - 测试路径: `pkg/cleanup/registryproxy/request_test.go::TestRegistryProxyRejectsAmbiguousPathsAndUnselectedDeletion` ### Check every registry service instance without accepting partial coverage - Capability ID: `rainbond.cleanup.registry-service-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/kubeidentity.InspectRegistryService` - 代码路径: `pkg/cleanup/kubeidentity/registry_service.go` - 测试路径: `pkg/cleanup/kubeidentity/registry_service_test.go::TestRegistryServiceRejectsMixedAndEmptyDeployments` ### Reject registry membership changes during ingress inspection - Capability ID: `rainbond.cleanup.registry-service-stable-membership` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `kubeidentity.InspectRegistryService` - 代码路径: `pkg/cleanup/kubeidentity/registry_service.go` - 测试路径: `pkg/cleanup/kubeidentity/registry_service_test.go::TestRegistryServiceRejectsMembershipChangeDuringInspection` ### Require admission before forwarding mutations without credential leakage - Capability ID: `rainbond.cleanup.registry-stream-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/registryproxy.Proxy.ServeHTTP` - 代码路径: `pkg/cleanup/registryproxy/proxy.go` - 测试路径: `pkg/cleanup/registryproxy/proxy_test.go::TestProxyAcquiresBeforeForwardingAndPreservesRegistryAuth` ### Keep upload leases across parts and drain existing sessions safely - Capability ID: `rainbond.cleanup.registry-upload-lifecycle` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.AcquireUploadRequest` - 代码路径: `pkg/cleanup/upload_coordination.go` - 测试路径: `pkg/cleanup/upload_coordination_test.go::TestUploadSessionRemainsProtectedBetweenParts` ### Keep restore metadata and result publication in admitted transactions - Capability ID: `rainbond.cleanup.restore-producer-transaction` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `BackupAPPRestore.withMetadataWrite` - 代码路径: `builder/exector/groupapp_restore.go`, `builder/exector/exector.go` - 测试路径: `builder/exector/cleanup_restore_admission_test.go::TestRestoreMetadataRetainsAdmissionAndRollsBackFailure` ### Serialize saved workload reference writes with cleanup admission - Capability ID: `rainbond.cleanup.saved-workload-reference-coordination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `K8sResourceDaoImpl` - 代码路径: `db/mysql/dao/k8s_resource.go` - 测试路径: `db/mysql/dao/k8s_resource_cleanup_test.go::TestSavedWorkloadWritesRespectCleanupAdmission` ### Protect ServiceMesh mutations until reference persistence is confirmed - Capability ID: `rainbond.cleanup.service-mesh-mutation-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `ApplicationAction.CreateServiceMeshCR` - 代码路径: `api/handler/application_handler.go` - 测试路径: `api/handler/cleanup_service_mesh_test.go::TestServiceMeshMutationsHoldCleanupAdmission` ### Preserve imported image references across component creation - Capability ID: `rainbond.cleanup.service_check_import_handoff` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `CleanServiceCheckData` - 代码路径: `api/handler/etcd_handler.go`, `api/controller/resources.go` - 测试路径: `api/handler/service_check_cleanup_test.go::TestServiceCheckCreationCleanupPreservesImportReferences` ### Slug sharing remains active until result persistence finishes - Capability ID: `rainbond.cleanup.share-task-completion` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exectorManager.slugShare` - 代码路径: `builder/exector/exector.go` - 测试路径: `builder/exector/cleanup_task_boundary_test.go::TestSlugShareTaskWaitsForResultPersistence` ### Project GC identity without exposing permit signing authority - Capability ID: `rainbond.cleanup.signed-gc-job-template` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `kubeidentity.BuildRegistryGCJob` - 代码路径: `pkg/cleanup/kubeidentity/gc_job_template.go` - 测试路径: `pkg/cleanup/kubeidentity/gc_job_template_test.go::TestSignedGCJobCopiesScopeButNeverPermitSigningSecret` ### Consume deletion permission once and retain verification protection - Capability ID: `rainbond.cleanup.single-deletion-attempt` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.BeginDeletionAttempt` - 代码路径: `pkg/cleanup/deletion_attempt.go` - 测试路径: `pkg/cleanup/deletion_attempt_test.go::TestDeletionAttemptIsConsumedOnceAndRemainsProtectedUntilVerified` ### Support activation tracking on SQLite - Capability ID: `rainbond.cleanup.sqlite-activation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `cleanup.TrackServiceActivation` - 代码路径: `pkg/cleanup/activation.go` - 测试路径: `pkg/cleanup/activation_sqlite_test.go::TestTrackServiceActivationSupportsSQLite` ### SQLite version selection inspection and retirement - Capability ID: `rainbond.cleanup.sqlite-version-store` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.SelectRollbackVersion` - 代码路径: `pkg/cleanup/store.go` - 测试路径: `pkg/cleanup/store_sqlite_test.go::TestVersionStoreSupportsSQLite` ### Collect writes during enrollment without granting cleanup - Capability ID: `rainbond.cleanup.storage-enrollment` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup.RegisterStorage` - 代码路径: `pkg/cleanup/registration.go` - 测试路径: `pkg/cleanup/registration_test.go::TestStorageRegistrationCollectsWritesWithoutEnablingDeletion` ### Bind storage identity atomically without replacing prior markers - Capability ID: `rainbond.cleanup.storage-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/cleanup/registryproxy.InitializeStorageIdentity` - 代码路径: `pkg/cleanup/registryproxy/identity.go` - 测试路径: `pkg/cleanup/registryproxy/identity_test.go::TestStorageIdentityIsBoundAndNeverOverwritten` ### Persist exact tar task reservation before MQ and retain unknown outcome - Capability ID: `rainbond.cleanup.tar-admission-before-enqueue` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `TarImageHandle.LoadTarImage` - 代码路径: `api/handler/tar_image_handler.go` - 测试路径: `api/handler/cleanup_queued_tar_test.go::TestTarAPIReservesBeforeEnqueueAndRetainsLostAcknowledgement` ### Restrict tar check input to event directory identifiers - Capability ID: `rainbond.cleanup.tar-check-event-path` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `parser.TarImageEventID` - 代码路径: `builder/parser/tar_event.go`, `builder/parser/docker_run.go` - 测试路径: `builder/parser/tar_event_test.go::TestTarImageEventIDRejectsTraversalAndMalformedSources` ### Fence tar image import through native work and result persistence - Capability ID: `rainbond.cleanup.tar-image-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exector.loadTarImage` - 代码路径: `builder/exector/tar_image_load.go`, `builder/exector/cleanup_image_admission.go` - 测试路径: `builder/exector/cleanup_tar_admission_test.go::TestTarImportAdmissionCoversWorkAndResultPersistence`, `builder/exector/cleanup_tar_admission_test.go::TestTarImportUnknownOutcomeRetainsProtection`, `builder/exector/cleanup_tar_admission_test.go::TestTarImportInvalidIdentityStopsBeforeFilesystemOrDatabase` ### Reject tar import before native work and preserve original result - Capability ID: `rainbond.cleanup.tar-image-entry` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exector.loadTarImage` - 代码路径: `builder/exector/tar_image_load.go` - 测试路径: `builder/exector/cleanup_tar_admission_test.go::TestTarImportEntryReportsMaintenanceWithoutStartingNativeWork` ### Do not overwrite a running tar import on duplicate delivery - Capability ID: `rainbond.cleanup.tar-image-redelivery` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exector.loadTarImage` - 代码路径: `builder/exector/tar_image_load.go` - 测试路径: `builder/exector/cleanup_tar_admission_test.go::TestTarImportRedeliveryDoesNotPublishFailureOverActiveWork` ### Block tar service check native work during maintenance - Capability ID: `rainbond.cleanup.tar-service-check-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exector.serviceCheck` - 代码路径: `builder/exector/service_check.go`, `builder/exector/cleanup_image_admission.go` - 测试路径: `builder/exector/cleanup_service_check_test.go::TestTarServiceCheckCannotPushDuringMaintenance` ### Retain upload session evidence when physical cleanup fails - Capability ID: `rainbond.cleanup.upload-cancel-evidence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `controller.ChunkUploadManager.CancelUpload` - 代码路径: `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/chunk_upload_cleanup_test.go::TestCancelUploadRetainsRecoveryEvidenceOnFailure` ### Persist upload completion before deleting resumable chunks - Capability ID: `rainbond.cleanup.upload-completion-evidence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `ChunkUploadManager.CompleteUpload` - 代码路径: `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/chunk_upload_completion_test.go::TestUploadCompletionPreservesEvidenceBeforeChunkDeletion` ### Gate selected upload chunk deletion on current writers storage identity expiry and scanned session - Capability ID: `rainbond.cleanup.upload-delete-api` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/uploads/chunks/delete` - 代码路径: `api/controller/cleanup_upload_delete.go`, `api/api_routers/version2/v2Routers.go` - 测试路径: `api/controller/cleanup_upload_delete_test.go::TestUploadDeleteAPIRequiresWriterStorageRuleAndSelectionEvidence` ### Preserve unverified expired upload records without expanding background deletion - Capability ID: `rainbond.cleanup.upload-expiration-evidence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `controller.ChunkUploadManager.cleanExpiredSessions` - 代码路径: `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/chunk_upload_cleanup_test.go::TestExpiredUploadCleanupPreservesRecoveryEvidence` ### Scope manual upload inventory and retain unknown measured sizes - Capability ID: `rainbond.cleanup.upload-inventory-api` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/uploads/inventory` - 代码路径: `api/controller/cleanup_upload_inventory.go`, `api/api_routers/version2/v2Routers.go` - 测试路径: `api/controller/cleanup_upload_inventory_test.go::TestUploadInventoryRestrictsEventsAndPreservesUnknownSizes` ### Bound upload inventory before physical storage reads - Capability ID: `rainbond.cleanup.upload-inventory-bounds` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cleanup/uploads/inventory` - 代码路径: `api/controller/cleanup_upload_inventory.go` - 测试路径: `api/controller/cleanup_upload_inventory_test.go::TestUploadInventoryRejectsOversizedResultBeforeReadingStorage` ### Protect package events referenced by retained versions and source checks - Capability ID: `rainbond.cleanup.upload-retained-references` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `ReadUploadPackageReferences` - 代码路径: `pkg/cleanup/package_references.go` - 测试路径: `pkg/cleanup/package_references_test.go::TestUploadReferencesProtectRetainedVersionsAndSourceChecks`, `pkg/cleanup/package_references_test.go::TestUploadReferencePathsAreCanonical` ### Keep native upload storage work protected through completion and restart - Capability ID: `rainbond.cleanup.upload-use-lifetime` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `ChunkUploadManager native storage lifecycle` - 代码路径: `api/controller/cleanup_upload_use.go`, `api/controller/chunk_upload_manager.go` - 测试路径: `api/controller/cleanup_upload_use_test.go::TestUploadUsePersistsAcrossStorageWorkAndUncertainResults`, `api/controller/cleanup_upload_use_test.go::TestUploadMaintenanceStopsNativeChunkWriteCancelAndExpiry` ### Require current API instances to register upload guard support separately from registry references - Capability ID: `rainbond.cleanup.upload-writer-coverage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `UploadWriterCoverageRegistered` - 代码路径: `pkg/cleanup/upload_writer.go`, `pkg/cleanup/reference_writer.go`, `pkg/cleanup/kubeidentity/reference_writer_startup.go` - 测试路径: `pkg/cleanup/upload_writer_test.go::TestUploadDeletionRequiresEveryCurrentAPIWriterProtocol` ### Cleanup requires configured token or verified platform client certificate - Capability ID: `rainbond.cleanup.verified-client-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api.middleware.CleanupIdentity` - 代码路径: `api/middleware/cleanup_identity.go` - 测试路径: `api/middleware/cleanup_identity_test.go::TestCleanupIdentityRequiresVerifiedClientOrConfiguredToken` ### Measure only the verified registry backing filesystem - Capability ID: `rainbond.cleanup.verified-storage-measurement` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `registryproxy.MeasureStorage` - 代码路径: `pkg/cleanup/registryproxy/measurement.go` - 测试路径: `pkg/cleanup/registryproxy/measurement_test.go::TestMeasurementRequiresBoundStorageAndRejectsSymlinks`, `cmd/registry-coordinator/main_test.go::TestMeasurementModeDoesNotInitializeOrNeedCredentials` ### Fence upgrade and rollback against version retirement - Capability ID: `rainbond.cleanup.version-activation-fence` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `OperationHandler.upgrade and ServiceAction.RollBack` - 代码路径: `api/handler/service.go`, `api/handler/service_operation.go` - 测试路径: `api/handler/cleanup_rollback_test.go::TestLegacyRollbackCannotActivateRetiredVersion`, `api/handler/cleanup_rollback_test.go::TestExplicitUpgradeRechecksVersionUnderRetirementLock`, `api/handler/cleanup_rollback_test.go::TestUpgradeQueueFailureCannotOverwriteNewerDeployment`, `api/handler/cleanup_rollback_test.go::TestLegacyRollbackRejectsWrongTenant`, `api/handler/cleanup_rollback_test.go::TestExplicitUpgradeEnqueuesValidatedVersion` ### Version writes serialize with manifest deletion - Capability ID: `rainbond.cleanup.version-reference-coordination` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `VersionInfoDaoImpl` - 代码路径: `db/mysql/dao/version.go`, `pkg/cleanup/reference_mutation.go` - 测试路径: `db/mysql/dao/version_cleanup_test.go::TestVersionCreationCannotRaceManifestDeletion` ### Version callbacks preserve activation and never recreate retired records - Capability ID: `rainbond.cleanup.version-update-no-resurrection` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `VersionInfoDaoImpl.UpdateModel` - 代码路径: `db/mysql/dao/version.go` - 测试路径: `db/mysql/dao/version_cleanup_test.go::TestVersionUpdateNeverRecreatesRetiredRecordsOrResetsActivation` ### Do not deploy VM after version activation rejection - Capability ID: `rainbond.cleanup.vm-activation-dispatch` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `exectorManager.buildFromVM` - 代码路径: `builder/exector/exector.go` - 测试路径: `builder/exector/cleanup_activation_test.go::TestVMBuildCannotDispatchAfterActivationRejected` ### Keep workload producer admission through Kubernetes mutation and reference commit - Capability ID: `rainbond.cleanup.workload-apply-admission` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `handler.admitWorkload` - 代码路径: `api/handler/cleanup_workload_admission.go`, `api/handler/resource.go` - 测试路径: `api/handler/cleanup_workload_admission_test.go::TestWorkloadAdmissionProtectsExternalApplyThroughCommit`, `api/handler/cleanup_workload_admission_test.go::TestWorkloadAdmissionRetainsOnlyUnresolvedEffects` ### Exercise YAML apply protection through HTTP and durable database outcomes - Capability ID: `rainbond.cleanup.yaml-apply-admission-integration` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `clusterAction.AddAppK8SResource` - 代码路径: `api/handler/resource.go` - 测试路径: `api/handler/cleanup_workload_apply_test.go::TestYAMLApplyAdmissionCoversRequestsAndPartialResults` ### 将 AliOSS 服务错误转换为统一存储 SDK 错误 - Capability ID: `rainbond.cloud-storage.alioss-error-map` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/cloudos.svcErrToS3SDKError` - 代码路径: `builder/cloudos/alioss.go` - 测试路径: `builder/cloudos/alioss_test.go::TestSvcErrToS3SDKError` ### 将云存储配置分发到正确的驱动实现 - Capability ID: `rainbond.cloud-storage.driver-factory` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/cloudos.New` - 代码路径: `builder/cloudos/cloudos.go` - 测试路径: `builder/cloudos/cloudos_test.go::TestNewDispatchesProviderDrivers` ### 解析云存储 provider 配置值 - Capability ID: `rainbond.cloud-storage.provider-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/cloudos.Str2S3Provider` - 代码路径: `builder/cloudos/cloudos.go` - 测试路径: `builder/cloudos/cloudos_test.go::TestStr2S3Provider` ### 按预期配置初始化 S3 存储驱动 - Capability ID: `rainbond.cloud-storage.s3-driver-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/cloudos.newS3` - 代码路径: `builder/cloudos/s3.go` - 测试路径: `builder/cloudos/s3_test.go::TestNewS3DriverKeepsConfig` ### 识别集群资源子路径 - Capability ID: `rainbond.cluster-resource.detect-subresource` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.containsSlash` - 代码路径: `api/handler/cluster_resource.go` - 测试路径: `api/handler/cluster_resource_test.go::TestContainsSlash` ### 从集群资源分配统计中排除终态 Pod - Capability ID: `rainbond.cluster-resource.exclude-terminal-pods` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.(*TenantAction).initClusterResource` - 代码路径: `api/handler/tenant.go` - 测试路径: `api/handler/resource_query_scope_test.go::TestInitClusterResourceExcludesTerminalPods` ### 复用集群资源处理器单例 - Capability ID: `rainbond.cluster-resource.handler-singleton` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `api/handler.GetClusterResourceHandler` - 代码路径: `api/handler/cluster_resource.go` - 测试路径: `api/handler/cluster_resource_test.go::TestGetClusterResourceHandlerSingleton` ### 校验集群资源 GVR 参数 - Capability ID: `rainbond.cluster-resource.validate-gvr` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.validateGVRParams` - 代码路径: `api/handler/cluster_resource.go` - 测试路径: `api/handler/cluster_resource_test.go::TestValidateGVRParams` ### Rainbond component readiness overview - Capability ID: `rainbond.cluster.rbd-component-readiness` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.clusterAction.ListRainbondComponents` - 代码路径: `api/handler/cluster.go` - 测试路径: `api/handler/cluster_overview_test.go::TestPodReadyForOverview`, `api/handler/cluster_overview_test.go::TestBuildRainbondComponentOverviewSortsByName`, `api/handler/cluster_overview_test.go::TestFinalizeRainbondComponentOverviewKeepsZeroPodOperatorSorted`, `api/handler/cluster_overview_test.go::TestDeduplicateRainbondComponentPodsPreventsOverlappingCounts` ### Preserve custom component configuration during image upgrades - Capability ID: `rainbond.cluster.upgrade-preserves-component-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /v2/cluster/rbd-upgrade` - 代码路径: `api/controller/cluster.go` - 测试路径: `api/controller/cluster_upgrade_test.go::TestUpgradePreservesComponentConfig` ### 从 CNB 版本表达式提取主版本 - Capability ID: `rainbond.cnb-version.extract-major` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.extractMajorFromSpec` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestExtractMajorFromSpec` ### 保持 Go CNB 版本顺序并将最新版本设为默认 - Capability ID: `rainbond.cnb-version.golang-order-and-default` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetCNBVersions` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestGetCNBVersionsGoOrderingAndDefault` ### 归一化并匹配 Go CNB 版本表达式 - Capability ID: `rainbond.cnb-version.match-golang` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.MatchCNBVersion` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestMatchCNBVersion_Golang` ### 为复合语言匹配 CNB 版本 - Capability ID: `rainbond.cnb-version.match-language` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.MatchCNBVersion` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestMatchCNBVersion_CompositeLanguage` ### 保持 Python CNB 版本顺序并将最新版本设为默认 - Capability ID: `rainbond.cnb-version.python-order-and-default` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetCNBVersions` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestGetCNBVersionsPythonOrderingAndDefault` ### 按语言解析支持的 CNB 版本 - Capability ID: `rainbond.cnb-version.resolve-supported` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetCNBVersions` - 代码路径: `builder/parser/code/cnb_versions.go` - 测试路径: `builder/parser/code/cnb_versions_test.go::TestGetCNBVersions` ### 将 CNB 注解键解码为 BP 环境变量名 - Capability ID: `rainbond.cnb.annotation-key-decode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.annotationKeyToBPEnv` - 代码路径: `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestAnnotationKeyToBPEnv` ### 将 BP 环境变量名编码为 CNB 注解键 - Capability ID: `rainbond.cnb.annotation-key-encode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.bpEnvToAnnotationKey` - 代码路径: `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBpEnvToAnnotationKey` ### 显式 CNB 注解优先于 BP 透传值 - Capability ID: `rainbond.cnb.bp-annotation-priority` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildPlatformAnnotations` - 代码路径: `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsBPNoOverride` ### 执行 CNB 构建任务全流程 - Capability ID: `rainbond.cnb.build-job-execution` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.runCNBBuildJob` - 代码路径: `builder/build/cnb/build.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestRunCNBBuildJob` ### 解析 CNB builder 镜像 - Capability ID: `rainbond.cnb.builder-image` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.GetCNBBuilderImage` - 代码路径: `builder/build/cnb/config.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestGetCNBBuilderImage` ### 注入指定的 CNB 配置文件内容 - Capability ID: `rainbond.cnb.config-file` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.injectConfigFile` - 代码路径: `builder/build/cnb/lang_nodejs.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestInjectConfigFile` ### 生成 CNB creator 命令参数 - Capability ID: `rainbond.cnb.creator-args` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildCreatorArgs` - 代码路径: `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildCreatorArgs` ### 为 CNB creator 附加 insecure registry 参数 - Capability ID: `rainbond.cnb.creator-args-insecure-registry` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildCreatorArgs` - 代码路径: `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildCreatorArgsInsecureRegistry` ### 解析 CNB 依赖镜像源 - Capability ID: `rainbond.cnb.dependency-mirror` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.getDependencyMirror` - 代码路径: `builder/build/cnb/lang_nodejs.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsMirrorDefault`, `builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotationsMirrorExplicit`, `builder/build/cnb/cnb_test.go::TestGetDependencyMirrorOffline` ### 生成 CNB 构建任务环境变量 - Capability ID: `rainbond.cnb.env-vars` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildEnvVars` - 代码路径: `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildEnvVars` ### 按来源模式注入 CNB 镜像配置 - Capability ID: `rainbond.cnb.mirror-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.nodejsConfig.InjectMirrorConfig` - 代码路径: `builder/build/cnb/lang_nodejs.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestInjectMirrorConfig` ### 传播 CNB 镜像配置写入失败 - Capability ID: `rainbond.cnb.mirror-config-write-error` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.nodejsConfig.InjectMirrorConfig` - 代码路径: `builder/build/cnb/lang_nodejs.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestInjectMirrorConfigWriteError` ### 创建 CNB 构建器实例 - Capability ID: `rainbond.cnb.new-builder` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.NewBuilder` - 代码路径: `builder/build/cnb/build.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestNewBuilder` ### Avoid ineffective npm registry caching while retaining image layer reuse - Capability ID: `rainbond.cnb.npm-cache-policy` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildCreatorArgs` - 代码路径: `builder/build/cnb/cache_policy.go`, `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cache_policy_test.go::TestCNBNPMCachePolicy`, `builder/build/cnb/cache_policy_test.go::TestCNBCachePolicyExplainsAutomaticBypass`, `builder/build/cnb/cache_policy_test.go::TestCNBCachePolicyPreservesCacheForUnknownSources` ### 为全局 npm 安装导出 NPM_CONFIG_REGISTRY - Capability ID: `rainbond.cnb.npm-global-registry` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.resolveNpmRegistry` - 代码路径: `builder/build/cnb/lang_nodejs.go`, `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestResolveNpmRegistry`, `builder/build/cnb/cnb_test.go::TestNodejsNpmRegistryAnnotation` ### 从 .npmrc 内容中解析默认 registry 配置项 - Capability ID: `rainbond.cnb.npmrc-registry-parse` - 状态: `active` - 测试类型: `unit` - 接口类型: `package_function` - 业务入口: `builder/build/cnb.npmRegistryFromNpmrc` - 代码路径: `builder/build/cnb/lang_nodejs.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestNpmRegistryFromNpmrc` ### 解析离线模式下的 CNB 镜像行为 - Capability ID: `rainbond.cnb.offline-mode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb offline mode helpers` - 代码路径: `builder/build/cnb/config.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestIsOfflineMode`, `builder/build/cnb/cnb_test.go::TestGetCNBBuilderImageOffline`, `builder/build/cnb/cnb_test.go::TestGetCNBRunImageOffline` ### 写入自定义 CNB order 定义 - Capability ID: `rainbond.cnb.order-toml` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.writeCustomOrder` - 代码路径: `builder/build/cnb/order.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestWriteCustomOrder` ### CNB order 文件写入失败时返回空标记 - Capability ID: `rainbond.cnb.order-write-failure` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.writeCustomOrder` - 代码路径: `builder/build/cnb/order.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestWriteCustomOrderFailure` ### 隔离源码包 CNB 构建工作目录并保留原始上传内容 - Capability ID: `rainbond.cnb.package-workspace-isolation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.Build` - 代码路径: `builder/build/cnb/build.go`, `builder/parser/package_workspace.go`, `util/comman.go` - 测试路径: `builder/build/cnb/package_workspace_test.go::TestCNBPackageBuildUsesPristineWorkspace`, `builder/build/cnb/package_workspace_test.go::TestCNBNonPackageBuildKeepsSourceDirectory`, `builder/parser/package_workspace_test.go::TestPreparePackageBuildWorkspace`, `builder/parser/package_workspace_test.go::TestPreparePackageBuildWorkspaceRejectsInvalidInput` ### Report observed CNB lifecycle phase durations without changing build output - Capability ID: `rainbond.cnb.phase-timing` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.runCNBBuildJob` - 代码路径: `builder/build/cnb/phase_logger.go`, `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/phase_logger_test.go::TestCNBPhaseTiming`, `builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingHandlesFragmentedLogs`, `builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingPreservesWriterErrors`, `builder/build/cnb/phase_logger_test.go::TestCNBPhaseTimingSerializesConcurrentWrites`, `builder/build/cnb/phase_logger_test.go::TestCNBJobEmitsFinalPhaseTiming` ### 根据构建环境生成 CNB 平台注解 - Capability ID: `rainbond.cnb.platform-annotations` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.buildPlatformAnnotations` - 代码路径: `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestBuildPlatformAnnotations` ### 根据注解创建 CNB 平台卷 - Capability ID: `rainbond.cnb.platform-volume` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.createPlatformVolume` - 代码路径: `builder/build/cnb/platform.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestCreatePlatformVolume`, `builder/build/cnb/cnb_test.go::TestCreatePlatformVolumeEmpty`, `builder/build/cnb/cnb_test.go::TestCreatePlatformVolumeNonCNBKeys` ### 清理历史 CNB 预构建任务 - Capability ID: `rainbond.cnb.prebuild-job-cleanup` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.stopPreBuildJob` - 代码路径: `builder/build/cnb/build.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestStopPreBuildJob` ### CNB 构建前校验项目文件 - Capability ID: `rainbond.cnb.project-file-validation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.validateProjectFiles` - 代码路径: `builder/build/cnb/build.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestValidateProjectFiles` ### 解析 CNB run 镜像 - Capability ID: `rainbond.cnb.run-image` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.GetCNBRunImage` - 代码路径: `builder/build/cnb/config.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestGetCNBRunImage` ### CNB 构建前规范化源码目录权限 - Capability ID: `rainbond.cnb.source-dir-permissions` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.setSourceDirPermissions` - 代码路径: `builder/build/cnb/build.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestSetSourceDirPermissions`, `builder/build/cnb/cnb_test.go::TestSetSourceDirPermissionsNonexistent` ### 纯静态源码使用 nginx buildpack - Capability ID: `rainbond.cnb.static-buildpacks` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.staticConfig.CustomOrder` - 代码路径: `builder/build/cnb/order.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestStaticBuildpacks` ### 创建 CNB 构建卷与挂载 - Capability ID: `rainbond.cnb.volume-mounts` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.createVolumeAndMount` - 代码路径: `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestCreateVolumeAndMount` ### 等待 CNB 构建任务完成状态 - Capability ID: `rainbond.cnb.waiting-complete` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build/cnb.Builder.waitingComplete` - 代码路径: `builder/build/cnb/job.go` - 测试路径: `builder/build/cnb/cnb_test.go::TestWaitingComplete` ### Block deleting shared mounted component volumes - Capability ID: `rainbond.component.volume-delete-blocks-shared-mount` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.VolumnVar` - 代码路径: `api/handler/service.go`, `db/dao/dao.go`, `db/mysql/dao/tenants.go` - 测试路径: `api/handler/service_volume_test.go::TestServiceActionVolumnVarDeleteRejectsSharedMountedVolume` ### Reject PVC volume shrink requests - Capability ID: `rainbond.component.volume-expansion-only-grows` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.UpdVolume` - 代码路径: `api/handler/service_volume_expansion.go`, `api/handler/service.go` - 测试路径: `api/handler/service_volume_test.go::TestServiceActionUpdVolumeRejectsShrink` ### Reconcile PVC request with stored volume capacity - Capability ID: `rainbond.component.volume-expansion-reconciles-drift` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.UpdVolume` - 代码路径: `api/handler/service_volume_expansion.go`, `api/handler/service.go` - 测试路径: `api/handler/service_volume_test.go::TestServiceActionUpdVolumeReconcilesStoredCapacity` ### Report PVC volume expansion capability and status - Capability ID: `rainbond.component.volume-expansion-status` - 状态: `active` - 测试类型: `unit` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.GetVolumes` - 代码路径: `api/handler/service_volume_expansion.go`, `api/handler/service.go` - 测试路径: `api/handler/service_volume_expansion_test.go::TestInspectVolumeExpansion` ### Expand every PVC for a component volume - Capability ID: `rainbond.component.volume-expansion-updates-claims` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.UpdVolume` - 代码路径: `api/handler/service_volume_expansion.go`, `api/handler/service.go` - 测试路径: `api/handler/service_volume_expansion_test.go::TestExpandVolumeClaims` ### Path edits with unchanged capacity do not require PVC expansion support - Capability ID: `rainbond.component.volume-path-update-without-expansion` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `ServiceAction.UpdVolume` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_volume_test.go::TestServiceActionUpdVolumePathDoesNotRequireExpansion` ### 持久化组件存储容量更新 - Capability ID: `rainbond.component.volume-update-persists-capacity` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.UpdVolume` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_volume_test.go::TestServiceActionUpdVolumeUpdatesVolumeCapacity` ### 组件存储更新请求保留容量字段 - Capability ID: `rainbond.component.volume-update-preserves-capacity` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `api/model.UpdVolumeReq` - 代码路径: `api/model/volume.go` - 测试路径: `api/model/volume_test.go::TestUpdVolumeReqPreservesVolumeCapacityFromJSON` ### 保留配置卷文件内容字段语义 - Capability ID: `rainbond.compose.config-volume-file-content` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/types.Volume.FileContent` - 代码路径: `builder/parser/types/types.go` - 测试路径: `builder/parser/file_content_test.go::TestVolumeFileContent` ### Docker Compose config volumes keep container path and mode - Capability ID: `rainbond.compose.config-volume-path-mode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.DockerComposeParse.Parse` - 代码路径: `builder/parser/docker_compose.go`, `builder/parser/compose/volume_helpers.go` - 测试路径: `builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseConfigVolumeUsesContainerPathAndMode` ### 识别配置文件类型的挂载路径 - Capability ID: `rainbond.compose.detect-config-file-mount` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/compose.isConfigFile` - 代码路径: `builder/parser/compose/version_detect.go` - 测试路径: `builder/parser/compose/version_detect_test.go::TestIsConfigFile` ### 根据语法特征推断 compose 版本 - Capability ID: `rainbond.compose.detect-version` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/compose.inferComposeVersion` - 代码路径: `builder/parser/compose/version_detect.go` - 测试路径: `builder/parser/compose/version_detect_test.go::TestInferComposeVersion` ### Warn when missing bind mount looks like a file - Capability ID: `rainbond.compose.missing-file-bind-warning` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.DockerComposeParse.Parse` - 代码路径: `builder/parser/docker_compose.go` - 测试路径: `builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWarnsMissingFileLikeBindMount` ### 解析 docker compose 并返回降级告警 - Capability ID: `rainbond.compose.parse-warnings` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.CreateDockerComposeParse.Parse` - 代码路径: `builder/parser/docker_compose.go` - 测试路径: `builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWithWarnings` ### Preserve docker compose volume source paths - Capability ID: `rainbond.compose.preserve-volume-source-path` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/parser/compose.loadV3Volumes` - 代码路径: `builder/parser/compose/version3.go` - 测试路径: `builder/parser/compose/version_detect_test.go::TestLoadV3VolumesPreservesSourcePathUnderscores` ### 支持 docker compose 中的 YAML anchors - Capability ID: `rainbond.compose.yaml-anchor-support` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.CreateDockerComposeParse.Parse` - 代码路径: `builder/parser/docker_compose.go` - 测试路径: `builder/parser/docker_compose_warnings_test.go::TestDockerComposeParseWithYAMLAnchors` ### 依赖配置文件保持提供方所有权 - Capability ID: `rainbond.config-file.dependent-configmap-ownership` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ConfigFileVolume.CreateDependVolume` - 代码路径: `worker/appm/volume/config-file.go`, `worker/appm/controller/upgrade.go`, `worker/appm/types/v1/labels.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeUsesProviderConfigMap`, `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForVMUsesProviderIdentity`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapLeavesExistingDependencyConfigMapToProvider`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapCreatesMissingDependencyConfigMapForProvider`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapDoesNotDeleteProviderDependency`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapReclaimsLegacyProviderConfigMap`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapDoesNotAdoptForeignCollision` ### 依赖配置文件使用提供方源文件键 - Capability ID: `rainbond.config-file.dependent-source-key` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ConfigFileVolume.CreateDependVolume` - 代码路径: `worker/appm/volume/config-file.go`, `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeUsesProviderFileKey`, `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForVMUsesProviderFileKey`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapMigratesOnlyLegacyDependentSourceKey`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapMigratesOnlyKnownLegacyConsumerConfigMap`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapRetriesDependentMigrationConflict`, `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapHandlesDependentCreateRace` ### Keep config-file Kubernetes volume names DNS-safe - Capability ID: `rainbond.config-file.k8s-volume-name-safe` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ConfigFileVolume.CreateVolume` - 代码路径: `worker/appm/volume/config-file.go`, `worker/appm/volume/volume.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateVolumeForDeploymentUsesK8sSafeVolumeName`, `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateDependVolumeForDeploymentUsesK8sSafeVolumeName` ### 识别源码目录中的 npm 和 yarn 配置文件 - Capability ID: `rainbond.config-files.detect` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectConfigFiles` - 代码路径: `builder/parser/code/config_files.go` - 测试路径: `builder/parser/code/config_files_test.go::TestDetectConfigFiles_Npmrc`, `builder/parser/code/config_files_test.go::TestDetectConfigFiles_YarnrcClassic`, `builder/parser/code/config_files_test.go::TestDetectConfigFiles_YarnrcYml`, `builder/parser/code/config_files_test.go::TestDetectConfigFiles_Multiple`, `builder/parser/code/config_files_test.go::TestDetectConfigFiles_None` ### 检测源码中是否存在包管理器配置文件 - Capability ID: `rainbond.config-files.has-any` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ConfigFiles.HasAnyConfigFile` - 代码路径: `builder/parser/code/config_files.go` - 测试路径: `builder/parser/code/config_files_test.go::TestConfigFiles_HasAnyConfigFile` ### 读取源码中的 npmrc 内容 - Capability ID: `rainbond.config-files.read-npmrc` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ConfigFiles.GetNpmrcContent` - 代码路径: `builder/parser/code/config_files.go` - 测试路径: `builder/parser/code/config_files_test.go::TestConfigFiles_GetNpmrcContent` ### 读取源码中的 yarnrc 内容 - Capability ID: `rainbond.config-files.read-yarnrc` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ConfigFiles.GetYarnrcContent` - 代码路径: `builder/parser/code/config_files.go` - 测试路径: `builder/parser/code/config_files_test.go::TestConfigFiles_GetYarnrcContent` ### 为包管理器选择相关配置文件 - Capability ID: `rainbond.config-files.resolve-relevant-file` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ConfigFiles.GetRelevantConfigFile` - 代码路径: `builder/parser/code/config_files.go` - 测试路径: `builder/parser/code/config_files_test.go::TestConfigFiles_GetRelevantConfigFile` ### Dockerfile BuildKit proxy environment inheritance - Capability ID: `rainbond.dockerfile-build.proxy-env-inheritance` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/build.buildKitProxyEnvVars` - 代码路径: `builder/build/dockerfile_build.go` - 测试路径: `builder/build/dockerfile_build_test.go::TestBuildKitProxyEnvVars` ### Render BuildKit TOML with optional registry mirrors - Capability ID: `rainbond.dockerfile-build.registry-mirror-toml` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.buildKitTomlContent` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/buildkit_toml_test.go::TestBuildKitTomlContent`, `builder/sources/buildkit_toml_test.go::TestBuildKitTomlContentLegacyEquivalence` ### 跟踪 Dockerfile AST 的行号信息 - Capability ID: `rainbond.dockerfile.line-info` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/dockerfile/parser.Parse` - 代码路径: `util/dockerfile/parser/parser.go` - 测试路径: `util/dockerfile/parser/parser_test.go::TestLineInformation` ### 将标准 Dockerfile 示例解析为稳定 AST - Capability ID: `rainbond.dockerfile.parse-fixtures` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/dockerfile/parser.Parse` - 代码路径: `util/dockerfile/parser/parser.go` - 测试路径: `util/dockerfile/parser/parser_test.go::TestTestData` ### 解析 Dockerfile 指令中的 JSON 数组语法 - Capability ID: `rainbond.dockerfile.parse-json-array` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/dockerfile/parser.parseJSON` - 代码路径: `util/dockerfile/parser/line_parsers.go` - 测试路径: `util/dockerfile/parser/json_test.go::TestJSONArraysOfStrings` ### 按引号与转义规则拆分 Dockerfile 指令参数 - Capability ID: `rainbond.dockerfile.parse-words` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/dockerfile/parser.parseWords` - 代码路径: `util/dockerfile/parser/parser.go` - 测试路径: `util/dockerfile/parser/parser_test.go::TestParseWords` ### 解析 Dockerfile 时拒绝无效示例 - Capability ID: `rainbond.dockerfile.reject-invalid` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/dockerfile/parser.Parse` - 代码路径: `util/dockerfile/parser/parser.go` - 测试路径: `util/dockerfile/parser/parser_test.go::TestTestNegative` ### 从协议与端口中拆分端点地址 - Capability ID: `rainbond.endpoint.address-split` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/endpoint.SplitEndpointAddress` - 代码路径: `util/endpoint/validation.go` - 测试路径: `util/endpoint/validation_test.go::TestSplitEndpointAddress` ### 判断端点地址应按域名而不是 IP 处理 - Capability ID: `rainbond.endpoint.domain-not-ip` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/endpoint.IsDomainNotIP` - 代码路径: `util/endpoint/validation.go` - 测试路径: `util/endpoint/validation_test.go::TestIsDomainNotIP` ### 校验端点域名及通配域名 - Capability ID: `rainbond.endpoint.domain-validate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/endpoint.ValidateDomain` - 代码路径: `util/endpoint/validation.go` - 测试路径: `util/endpoint/validation_test.go::TestValidateDomain` ### 校验端点 IP 地址并拒绝受限网段 - Capability ID: `rainbond.endpoint.ip-validate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/endpoint.ValidateEndpointIP` - 代码路径: `util/endpoint/validation.go` - 测试路径: `util/endpoint/validation_test.go::TestValidateEndpointIP` ### Treat no-op component env updates as success - Capability ID: `rainbond.env-var.noop-update` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db.mysql.dao.TenantServiceEnvVarDaoImpl.UpdateModelByAttrName` - 代码路径: `db/mysql/dao/tenants.go` - 测试路径: `db/mysql/dao/tenant_service_env_var_test.go::TestTenantServiceEnvVarDaoUpdateModelByAttrNameNoopSucceeds` ### 判断内存大小是自定义值还是预设值 - Capability ID: `rainbond.envutil.custom-memory` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/envutil.IsCustomMemory` - 代码路径: `util/envutil/envutil.go` - 测试路径: `util/envutil/envutil_test.go::TestIsCustomMemory` ### 在 envutil 中为缺失环境变量返回默认值 - Capability ID: `rainbond.envutil.getenv-default` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/envutil.GetenvDefault` - 代码路径: `util/envutil/envutil.go` - 测试路径: `util/envutil/envutil_test.go::TestGetenvDefault` ### 将内存大小映射为预设内存标签 - Capability ID: `rainbond.envutil.memory-label` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/envutil.GetMemoryType` - 代码路径: `util/envutil/envutil.go` - 测试路径: `util/envutil/envutil_test.go::TestGetMemoryType` ### Reject log list requests without a component identity - Capability ID: `rainbond.event-log.require-log-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `GET /v2/cluster/log-file` - 代码路径: `api/controller/event_log.go` - 测试路径: `api/controller/event_log_test.go::TestLogListRejectsMissingLogIdentity` ### 事件日志文件存储的追加读取与清理 - Capability ID: `rainbond.eventlog.file-store` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/eventlog/store.JSONLinesFileStore` - 代码路径: `api/eventlog/store/filestore.go` - 测试路径: `api/eventlog/store/filestore_test.go::TestJSONLinesFileStore` ### 事件日志文件存储支持并发写入 - Capability ID: `rainbond.eventlog.file-store-concurrency` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/eventlog/store.JSONLinesFileStore.Append` - 代码路径: `api/eventlog/store/filestore.go` - 测试路径: `api/eventlog/store/filestore_test.go::TestFileStoreConcurrency` ### 文件操作上传拒绝不安全相对路径 - Capability ID: `rainbond.file-operate.upload-folder-path-traversal` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/controller.resolveUploadRelativePath` - 代码路径: `api/controller/service_monitor.go` - 测试路径: `api/controller/service_monitor_upload_test.go::TestResolveUploadRelativePathRejectsTraversal` ### 文件操作上传保留文件夹路径 - Capability ID: `rainbond.file-operate.upload-folder-relative-path` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/controller.resolveUploadRelativePath` - 代码路径: `api/controller/service_monitor.go` - 测试路径: `api/controller/service_monitor_upload_test.go::TestResolveUploadRelativePathPreservesFolderFromContentDisposition` ### 幂等初始化并复用火山引擎 NAS 客户端 - Capability ID: `rainbond.filepersistence.volcengine-client-init` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/component/filepersistence.VolcengineProvider.init` - 代码路径: `pkg/component/filepersistence/volcengine.go` - 测试路径: `pkg/component/filepersistence/volcengine_test.go::TestVolcengineProviderInitIsIdempotent` ### 识别 Angular SPA 模式 - Capability ID: `rainbond.framework-detect.angular-spa` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Angular_SPA` ### 识别 Angular SSR 模式 - Capability ID: `rainbond.framework-detect.angular-ssr` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Angular_SSR` ### 识别 Create React App 框架 - Capability ID: `rainbond.framework-detect.cra` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_CRA` ### 解析框架展示名称 - Capability ID: `rainbond.framework-detect.display-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetDisplayName` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestGetDisplayName` ### 识别 Express 框架 - Capability ID: `rainbond.framework-detect.express` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Express` ### 识别 NestJS 框架 - Capability ID: `rainbond.framework-detect.nestjs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NestJS` ### 从源码目录识别 Next.js 框架 - Capability ID: `rainbond.framework-detect.nextjs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NextJS` ### 无配置文件时识别 Next.js - Capability ID: `rainbond.framework-detect.nextjs-no-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NextJS_NoConfigFile` ### 识别 Next.js SSR 模式 - Capability ID: `rainbond.framework-detect.nextjs-ssr` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NextJS_SSR` ### 识别 Next.js 静态导出模式 - Capability ID: `rainbond.framework-detect.nextjs-static-export` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NextJS_StaticExport` ### 普通 Node 项目不识别框架 - Capability ID: `rainbond.framework-detect.no-framework` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NoFramework` ### 缺少 package.json 时不识别前端框架 - Capability ID: `rainbond.framework-detect.no-package-json` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_NoPackageJSON` ### 从源码目录识别 Nuxt 框架 - Capability ID: `rainbond.framework-detect.nuxt` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Nuxt` ### 识别 Nuxt 静态目标模式 - Capability ID: `rainbond.framework-detect.nuxt-static-target` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Nuxt_StaticTarget` ### 识别关闭 SSR 的 Nuxt3 - Capability ID: `rainbond.framework-detect.nuxt3-ssr-false` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Nuxt3_SSRFalse` ### 识别 Nuxt3 静态输出模式 - Capability ID: `rainbond.framework-detect.nuxt3-static` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Nuxt3_NitroStatic` ### 列出支持识别的前端框架 - Capability ID: `rainbond.framework-detect.supported-list` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetSupportedFrameworks` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestGetSupportedFrameworks` ### 规范化框架依赖版本号 - Capability ID: `rainbond.framework-detect.version-normalization` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.cleanVersion` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestCleanVersion` ### 识别 Vite 框架 - Capability ID: `rainbond.framework-detect.vite` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectFramework` - 代码路径: `builder/parser/code/framework.go` - 测试路径: `builder/parser/code/framework_test.go::TestDetectFramework_Vite` ### 分配可用网关负载均衡端口 - Capability ID: `rainbond.gateway.allocate-lb-port` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.selectAvailablePort` - 代码路径: `api/handler/gateway_action.go` - 测试路径: `api/handler/gateway_action_test.go::TestSelectAvailablePort` ### Reconcile automatic certificate resources across route ownership changes - Capability ID: `rainbond.gateway.auto-certificate-route-lifecycle` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `automatic certificate route lifecycle` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestEnsureCertManagerResourcesAdoptsExistingRouteOwnership`, `api/controller/apigateway/api_gateway_route_test.go::TestDeleteCertManagerResourcesRemovesCertificateAndTLS`, `api/controller/apigateway/api_gateway_route_test.go::TestCertManagerRouteNameUsesResourceSegment` ### Keep gateway certificate resources consistent - Capability ID: `rainbond.gateway.certificate-resource-consistency` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.GatewayAction.AddGatewayCertificate` - 代码路径: `api/handler/gateway_action.go` - 测试路径: `api/handler/gateway_action_test.go::TestGatewayCertificateResourceConsistency` ### Manage gateway client CA lifecycle - Capability ID: `rainbond.gateway.client-ca-lifecycle` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.GatewayAction.AddGatewayClientCA` - 代码路径: `api/handler/gateway_action.go`, `api/model/gateway_model.go` - 测试路径: `api/handler/gateway_action_test.go::TestGatewayClientCALifecycle` ### Configure inbound mTLS per gateway domain - Capability ID: `rainbond.gateway.domain-mtls` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.GatewayAction.ConfigureGatewayDomainMTLS` - 代码路径: `api/handler/gateway_action.go`, `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/handler/gateway_action_test.go::TestGatewayDomainMTLS` ### 删除网关 HTTPRoute 时记录组件事件 - Capability ID: `rainbond.gateway.http-route-delete-component-event` - 状态: `active` - 测试类型: `regression` - 接口类型: `service_method` - 业务入口: `github.com/goodrain/rainbond/api/handler.(*GatewayAction).DeleteGatewayHTTPRoute` - 代码路径: `api/handler/gateway_action.go` - 测试路径: `api/handler/gateway_action_test.go::TestCreateGatewayHTTPRouteDeleteEvents` ### Normalize and validate HTTP route source IP restrictions - Capability ID: `rainbond.gateway.http-route-source-ip-validation` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/controller/apigateway.Struct.CreateHTTPAPIRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_remote_addrs_test.go::TestCreateHTTPAPIRouteNormalizesRemoteAddrs` ### Keep APISIX HTTP route rule identity stable - Capability ID: `rainbond.gateway.http-route-stable-rule-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.CreateHTTPAPIRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestStableHTTPRouteRuleName`, `api/controller/apigateway/api_gateway_route_test.go::TestHTTPRouteCreateFailure` ### Protect recreated TCP route Services with UID delete preconditions - Capability ID: `rainbond.gateway.prevent-tcp-route-delete-recreation-race` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.DeleteTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteDoesNotDeleteRecreatedServiceWithStaleUID` ### Reject TCP route updates for missing or different Service owners - Capability ID: `rainbond.gateway.protect-tcp-route-service-ownership` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.CreateTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteRejectsExistingServiceWithoutMatchingOwner` ### Do not delete unlabeled TCP route Services for owned requests - Capability ID: `rainbond.gateway.protect-unlabeled-tcp-route-service` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.DeleteTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteWithServiceIDDoesNotDeleteUnlabeledService` ### Reassign imported TCP ports that conflict with existing NodePorts - Capability ID: `rainbond.gateway.reassign-conflicting-imported-tcp-port` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.reassignConflictingTCPRulePorts` - 代码路径: `api/handler/gateway_action.go` - 测试路径: `api/handler/gateway_action_test.go::TestReassignConflictingTCPRulePorts` ### Reconcile stale TCP NodePort database rules after Kubernetes allocation - Capability ID: `rainbond.gateway.reconcile-stale-tcp-nodeport-rules` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.CreateTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteReconcilesStaleDatabaseRules` ### Reject duplicate TCP NodePort bindings - Capability ID: `rainbond.gateway.reject-duplicate-tcp-nodeport` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `TCP NodePort binding` - 代码路径: `db/mysql/dao/gateway.go`, `api/controller/apigateway/api_gateway_route.go` - 测试路径: `db/mysql/dao/gateway_test.go::TestTCPRuleDaoAddModelRejectsPortOwnedByAnotherRule`, `api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteRejectsExplicitPortOwnedByAnotherService` ### Release only the requested owner when a TCP route Service is absent - Capability ID: `rainbond.gateway.release-absent-tcp-nodeport-owner` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.DeleteTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteAlreadyAbsentReleasesOnlyRequestedOwner` ### Release only TCP NodePort rules captured before Service deletion - Capability ID: `rainbond.gateway.release-captured-tcp-nodeport-rules` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.DeleteTCPRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestDeleteTCPRouteReleasesOnlyCapturedRuleIDs` ### TCP route creation reports Kubernetes error details - Capability ID: `rainbond.gateway.report-tcp-service-create-error-details` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `POST /api-gateway/v1/{tenant_name}/routes/tcp` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestCreateTCPRouteReportsServiceCreateErrorDetails` ### Reject HTTP gateway routes without hosts or paths - Capability ID: `rainbond.gateway.validate-http-route-match` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/controller/apigateway.Struct.CreateHTTPAPIRoute` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestHTTPRouteResourceNameValidatesMatch` ### Reject out-of-range TCP NodePorts parsed from route names - Capability ID: `rainbond.gateway.validate-tcp-nodeport-route-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/controller/apigateway.nodePortFromTCPRouteName` - 代码路径: `api/controller/apigateway/api_gateway_route.go` - 测试路径: `api/controller/apigateway/api_gateway_route_test.go::TestNodePortFromTCPRouteNameValidatesRange` ### 为 Helm 历史输出格式化应用版本号 - Capability ID: `rainbond.helm-release.app-version-format` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.formatAppVersion` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestGetReleaseHistory` ### 为历史和摘要输出格式化 Helm chart 名称 - Capability ID: `rainbond.helm-release.chart-name-format` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.formatChartName` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestGetReleaseHistory` ### 按资源类型归类 Helm 发布资源 - Capability ID: `rainbond.helm-release.classify-resources` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.splitHelmReleaseResources` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestSplitHelmReleaseResourcesClassifiesKinds` ### 推导 Helm 发布默认命名空间 - Capability ID: `rainbond.helm-release.default-namespace` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.helmReleaseNamespace` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestHelmReleaseNamespaceUsesTenantNamespaceWhenPresent`, `api/handler/helm_release_test.go::TestHelmReleaseNamespaceFallsBackToTenantUUID` ### 汇总 Helm 发布详情 - Capability ID: `rainbond.helm-release.detail-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.summarizeHelmReleaseDetail` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestSummarizeHelmReleaseDetailBuildsStableDTO` ### 汇总 Helm 发布历史 - Capability ID: `rainbond.helm-release.history-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.summarizeHelmReleaseHistory` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestSummarizeHelmReleaseHistoryBuildsStableDTO`, `pkg/helm/helm_release_test.go::TestGetReleaseHistory` ### 规范 Helm 安装默认参数 - Capability ID: `rainbond.helm-release.install-defaults` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.HelmReleaseInstallRequest.Normalize` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestHelmReleaseInstallRequestNormalizeDefaults` ### 校验 Helm 安装请求 - Capability ID: `rainbond.helm-release.install-validate` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.HelmReleaseInstallRequest.Validate` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestHelmReleaseInstallRequestValidate` ### 拒绝不可安装的 Helm chart 类型 - Capability ID: `rainbond.helm-release.installable-check` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.checkIfInstallable` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestCheckIfInstallable` ### 汇总 Helm 发布列表项 - Capability ID: `rainbond.helm-release.list-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.summarizeHelmRelease` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestSummarizeHelmReleaseBuildsStableDTO` ### 识别 Helm 托管资源归属 - Capability ID: `rainbond.helm-release.match-managed-resource` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.isHelmReleaseResource` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestIsHelmReleaseResourceMatchesManagedByAndInstanceLabels` ### 规范化 OCI chart 引用并推导版本标签 - Capability ID: `rainbond.helm-release.oci-reference-normalize` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.normalizeOCIChartReference` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestNormalizeOCIChartReference` ### 将 Helm 预览来源错误转换为错误请求 - Capability ID: `rainbond.helm-release.preview-source-error` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.wrapHelmChartPreviewSourceError` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestWrapHelmChartPreviewSourceErrorConvertsToBadRequest`, `api/handler/helm_release_test.go::TestWrapHelmChartPreviewSourceErrorPreservesBadRequest` ### 解析 Helm 发布命名空间 - Capability ID: `rainbond.helm-release.resolve-namespace` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.HelmReleaseHandler.resolveNamespace` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestResolveHelmReleaseNamespaceUsesExplicitNamespace` ### 请求未指定时从团队推导 Helm 命名空间 - Capability ID: `rainbond.helm-release.resolve-namespace-fallback` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.(*HelmReleaseHandler).resolveNamespace` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestResolveHelmReleaseNamespaceFallsBackToTenantNamespace` ### 校验 Helm 回滚版本 - Capability ID: `rainbond.helm-release.rollback-validate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.HelmReleaseRollbackRequest.Validate` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestHelmReleaseRollbackRequestValidate` ### 在安装或加载前移除 chart 的 kubeVersion 要求 - Capability ID: `rainbond.helm-release.strip-kube-version` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.removeKubeVersionFromChart` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestCheckIfInstallable` ### 拦截 Helm 升级图表不匹配 - Capability ID: `rainbond.helm-release.upgrade-chart-guard` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.validateUpgradeChartName` - 代码路径: `api/handler/helm_release.go` - 测试路径: `api/handler/helm_release_test.go::TestValidateUpgradeChartNameRejectsMismatchByDefault`, `api/handler/helm_release_test.go::TestValidateUpgradeChartNameAllowsMismatchWithExplicitConfirmation` ### 将 Helm values YAML 解析为可安装的 values 映射 - Capability ID: `rainbond.helm-release.values-yaml` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.parseValuesYAML` - 代码路径: `pkg/helm/helm.go` - 测试路径: `pkg/helm/helm_release_test.go::TestParseValuesYAML` ### 添加 Helm 仓库 - Capability ID: `rainbond.helm-repo.add` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `pkg/helm.Repo.Add` - 代码路径: `pkg/helm/repo.go` - 测试路径: `pkg/helm/repo_test.go::TestRepoAdd` ### 当相同 Helm 仓库已存在时跳过重复添加 - Capability ID: `rainbond.helm-repo.add-idempotent` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.Repo.Add` - 代码路径: `pkg/helm/repo.go` - 测试路径: `pkg/helm/repo_test.go::TestRepoAddSkipsExistingConfig` ### 拒绝已废弃的 Helm 仓库地址 - Capability ID: `rainbond.helm-repo.reject-deprecated` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.Repo.Add` - 代码路径: `pkg/helm/repo.go` - 测试路径: `pkg/helm/repo_test.go::TestRepoAddRejectsDeprecatedRepo` ### 校验并匹配请求更新的 Helm 仓库名称 - Capability ID: `rainbond.helm-repo.requested-filter` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/helm.checkRequestedRepos` - 代码路径: `pkg/helm/update.go` - 测试路径: `pkg/helm/helm_release_test.go::TestCheckRequestedRepos` ### 当没有匹配的仓库 Pod 时跳过垃圾回收执行 - Capability ID: `rainbond.image-clean.registry-gc-noop` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/clean.Manager.PodExecCmd` - 代码路径: `builder/clean/clean.go` - 测试路径: `builder/clean/clean_test.go::TestPodExecCmdNoMatchingPod` ### 通过取消上下文停止镜像清理管理器循环 - Capability ID: `rainbond.image-clean.stop-loop` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/clean.Manager.Stop` - 代码路径: `builder/clean/clean.go` - 测试路径: `builder/clean/clean_test.go::TestManagerStopCancelsContext` ### 镜像分享失败后不自动重试 - Capability ID: `rainbond.image-share.single-attempt` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.imageShare` - 代码路径: `builder/exector/exector.go` - 测试路径: `builder/exector/share_image_test.go::TestExecuteImageShareOnceDoesNotRetryFailure`, `builder/exector/share_image_test.go::TestExecuteImageShareOnceReturnsSuccess` ### 为 ingress-nginx 监听对象构建 namespace/name 键 - Capability ID: `rainbond.ingress-nginx.meta-namespace-key` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/ingress-nginx/k8s.MetaNamespaceKey` - 代码路径: `util/ingress-nginx/k8s/main.go` - 测试路径: `util/ingress-nginx/k8s/main_test.go::TestMetaNamespaceKey` ### 解析 ingress-nginx 资源的 namespace/name 标识 - Capability ID: `rainbond.ingress-nginx.name-namespace-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/ingress-nginx/k8s.ParseNameNS` - 代码路径: `util/ingress-nginx/k8s/main.go` - 测试路径: `util/ingress-nginx/k8s/main_test.go::TestParseNameNS` ### 为 ingress-nginx helper 解析节点内外网 IP - Capability ID: `rainbond.ingress-nginx.node-ip-resolve` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/ingress-nginx/k8s.GetNodeIPOrName` - 代码路径: `util/ingress-nginx/k8s/main.go` - 测试路径: `util/ingress-nginx/k8s/main_test.go::TestGetNodeIPOrName` ### 根据环境变量和集群状态解析 ingress-nginx Pod 详情 - Capability ID: `rainbond.ingress-nginx.pod-details` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/ingress-nginx/k8s.GetPodDetails` - 代码路径: `util/ingress-nginx/k8s/main.go` - 测试路径: `util/ingress-nginx/k8s/main_test.go::TestGetPodDetails` ### CRD cascade deletion preserves dependency order - Capability ID: `rainbond.k8s-resource.crd-cascade-delete` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.k8sResourceDeletionOrchestrator.Delete` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceDeletionDeletesCustomResourcesBeforeDefinition` ### Kubernetes deletion requests outlive the global HTTP timeout - Capability ID: `rainbond.k8s-resource.deletion-request-timeout` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/interceptors.requestTimeout` - 代码路径: `pkg/interceptors/http.go` - 测试路径: `pkg/interceptors/http_test.go::TestRequestTimeout` ### Kubernetes deletion timeout performs a final live check - Capability ID: `rainbond.k8s-resource.deletion-timeout-final-check` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.k8sResourceDeletionOrchestrator.Delete` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceDeletionFinalCheckAvoidsTimeoutRace` ### Failed resources are metadata-only during deletion - Capability ID: `rainbond.k8s-resource.failed-delete-metadata-only` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.k8sResourceDeletionOrchestrator.Delete` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceDeletionSkipsFailedResourceKubernetesDeletion` ### Kubernetes resource metadata reconciliation - Capability ID: `rainbond.k8s-resource.metadata-reconcile` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.k8sResourceDeletionOrchestrator.Reconcile` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceReconcileDistinguishesMissingAndUnknown` ### Resource deletion and reconciliation responses encode empty lists as arrays - Capability ID: `rainbond.k8s-resource.response-array-contract` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `k8sResourceDeletionOrchestrator` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceDeletionResponseArrays`, `api/handler/resource_deletion_test.go::TestK8sResourceReconcileResponseArrays` ### Stop in-application controllers before deleting generated custom resources - Capability ID: `rainbond.k8s-resource.stop-recreating-controller` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.k8sResourceDeletionOrchestrator.Delete` - 代码路径: `api/handler/resource_deletion.go` - 测试路径: `api/handler/resource_deletion_test.go::TestK8sResourceDeletionStopsManagedControllerBeforeGeneratedResources`, `api/handler/resource_deletion_test.go::TestK8sResourceDeletionKeepsControllerUntilFinalizedResourcesAreGone` ### K8s scheme registers KubeVirt VirtualMachine - Capability ID: `rainbond.k8s.scheme-registers-kubevirt-vm` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `pkg/component/k8s.init` - 代码路径: `pkg/component/k8s/k8sComponent.go` - 测试路径: `pkg/component/k8s/k8sComponent_test.go::TestSchemeRegistersKubeVirtVirtualMachine` ### 为 KubeBlocks 组件生成标签选择器 - Capability ID: `rainbond.kubeblocks.component-selector` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/kubeblocks.GenerateKubeBlocksSelector` - 代码路径: `util/kubeblocks/kubeblocks.go` - 测试路径: `util/kubeblocks/kubeblocks_test.go::TestGenerateKubeBlocksSelector` ### 解码并解析许可证令牌内容 - Capability ID: `rainbond.license.decode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.DecodeLicense` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestDecodeLicense` ### 解析 PEM 编码的 RSA 公钥 - Capability ID: `rainbond.license.parse-public-key` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.ParsePublicKey` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestParsePublicKey` ### 根据许可证映射判断插件是否允许使用 - Capability ID: `rainbond.license.plugin-allowlist` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.IsPluginAllowed` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestIsPluginAllowed_Wildcard` ### 往返编码解码并校验许可证令牌 - Capability ID: `rainbond.license.round-trip` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.EncodeLicense` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestRoundTrip` ### 将许可证令牌投影为状态响应 - Capability ID: `rainbond.license.status-projection` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.TokenToStatus` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestTokenToStatus` ### 校验许可证企业绑定与生效时间窗口 - Capability ID: `rainbond.license.validate-token` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.ValidateToken` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestValidateToken_Valid` ### 校验许可证 RSA 签名 - Capability ID: `rainbond.license.verify-signature` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/util/license.VerifySignature` - 代码路径: `api/util/license/rsa_license.go` - 测试路径: `api/util/license/rsa_license_test.go::TestVerifySignature_Valid` ### Service reconciliation preserves allocated Kubernetes identity - Capability ID: `rainbond.lifecycle.service-reconcile-preserves-identity` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/controller.CreateKubeService` - 代码路径: `worker/appm/controller/kube-controller.go` - 测试路径: `worker/appm/controller/kube-controller_test.go::TestCreateKubeServiceReconcilesOwnedServiceAndPreservesIdentity` ### Service reconciliation rejects foreign ownership - Capability ID: `rainbond.lifecycle.service-reconcile-rejects-foreign-owner` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/controller.CreateKubeService` - 代码路径: `worker/appm/controller/kube-controller.go` - 测试路径: `worker/appm/controller/kube-controller_test.go::TestCreateKubeServiceRejectsForeignService` ### Stopping a component preserves its generated Service identity - Capability ID: `rainbond.lifecycle.stop-preserves-service` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.stopController.stopOne` - 代码路径: `worker/appm/controller/stop.go` - 测试路径: `worker/appm/controller/stop_test.go::TestStopPreservesGeneratedService` ### Suppress container exit events during intentional stop - Capability ID: `rainbond.lifecycle.stop-suppresses-exit-event` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/master/podevent.shouldReportContainerExit` - 代码路径: `worker/master/podevent/podevent.go` - 测试路径: `worker/master/podevent/health_event_test.go::TestShouldReportContainerExit` ### Manual PVC cleanup tolerates absent claims and preserves deletion errors - Capability ID: `rainbond.manual-pvc-upgrade-delete-idempotent` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/f/function.go`, `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsDeletesStaleClaims` ### Preserve bound manual PVC immutable spec fields during app upgrade - Capability ID: `rainbond.manual-pvc-upgrade-preserves-bound-claim-immutable-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/controller/upgrade.go`, `worker/appm/f/function.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsPreservesBoundClaimImmutableSpec` ### Preserve existing manual PVC metadata during app upgrade - Capability ID: `rainbond.manual-pvc-upgrade-preserves-existing-metadata` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/f/function.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsPreservesExistingMetadata` ### Skip manual PVC updates when storage request is unchanged - Capability ID: `rainbond.manual-pvc-upgrade-skips-unchanged-storage` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/f/function.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsSkipsUnchangedStorage` ### 应用升级时返回手动 PVC 更新错误 - Capability ID: `rainbond.manual-pvc-upgrade-surfaces-update-errors` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsReturnsUpdateError` ### 应用升级时更新已有手动 PVC - Capability ID: `rainbond.manual-pvc-upgrade-updates-existing-claim` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeManualClaims` - 代码路径: `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/controller/upgrade_manual_claim_test.go::TestUpgradeControllerUpgradeManualClaimsUpdatesExistingClaim` ### 列出 Maven 多服务模块 - Capability ID: `rainbond.maven.list-modules` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code/multisvc.maven.ListModules` - 代码路径: `builder/parser/code/multisvc/maven.go` - 测试路径: `builder/parser/code/multisvc/maven_test.go::TestMaven_ListModules` ### 解析 Maven 父 pom 的模块与打包方式 - Capability ID: `rainbond.maven.parse-pom` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code/multisvc.parsePom` - 代码路径: `builder/parser/code/multisvc/maven.go` - 测试路径: `builder/parser/code/multisvc/maven_test.go::TestMaven_ParsePom` ### 消息队列出队响应取消并保留待处理消息 - Capability ID: `rainbond.mq.cancelable-dequeue` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `mq/api/mq.etcdQueue.Dequeue` - 代码路径: `mq/api/mq/mq.go`, `mq/api/mq/store.go` - 测试路径: `mq/api/mq/store_test.go::TestDequeueCanceledRequestPreservesQueuedMessage`, `mq/api/mq/store_test.go::TestDequeueHonorsCallerDeadline`, `mq/api/mq/store_test.go::TestCanceledDequeueDoesNotConsumeLaterMessage`, `mq/api/mq/store_test.go::TestDequeueWaitsForMessagesInFIFOOrder` ### 在多服务解析器选择中忽略非 Java 语言 - Capability ID: `rainbond.multisvc.ignore-non-java` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code/multisvc.NewMultiServiceI` - 代码路径: `builder/parser/code/multisvc/multi_services.go` - 测试路径: `builder/parser/code/multisvc/multi_services_test.go::TestNewMultiServiceI_IgnoresLanguagesWithoutJavaMaven` ### 为复合语言选择 Java Maven 多服务解析器 - Capability ID: `rainbond.multisvc.select-java-maven` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code/multisvc.NewMultiServiceI` - 代码路径: `builder/parser/code/multisvc/multi_services.go` - 测试路径: `builder/parser/code/multisvc/multi_services_test.go::TestNewMultiServiceI_SupportsCompositeJavaMaven` ### 汇总 Node 版本展示与派生信息 - Capability ID: `rainbond.node-version.display-info` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.NodeVersionInfo helpers` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestCleanVersionSpec`, `builder/parser/code/node_version_test.go::TestExtractMajorVersion`, `builder/parser/code/node_version_test.go::TestExtractMinorPatch`, `builder/parser/code/node_version_test.go::TestNodeVersionInfo_IsLTS`, `builder/parser/code/node_version_test.go::TestNodeVersionInfo_GetNodeVersionDisplay` ### 将不受支持的 Node.js 版本回退到支持范围 - Capability ID: `rainbond.node-version.fallback-supported-range` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ResolveNodeVersion` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestResolveNodeVersion_UnsupportedVersion` ### 规范化带 v 前缀的 Node.js 版本 - Capability ID: `rainbond.node-version.normalize-v-prefix` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ResolveNodeVersion` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestResolveNodeVersion_WithVPrefix` ### 从 package.json 解析 Node 版本要求 - Capability ID: `rainbond.node-version.parse-package-json` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ParseNodeVersionFromPackageJSON` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON`, `builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON_NoEngines`, `builder/parser/code/node_version_test.go::TestParseNodeVersionFromPackageJSON_NoPackageJSON` ### 解析范围形式的 Node.js 版本约束 - Capability ID: `rainbond.node-version.resolve-range` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ResolveNodeVersion` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestResolveNodeVersion_Range` ### 将 Node 版本表达式解析为支持的运行时版本 - Capability ID: `rainbond.node-version.resolve-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ResolveNodeVersion` - 代码路径: `builder/parser/code/node_version.go` - 测试路径: `builder/parser/code/node_version_test.go::TestResolveNodeVersion_Empty`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_Wildcard`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_GreaterThanOrEqual`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_Caret`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_Tilde`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_XNotation`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_MajorOnly`, `builder/parser/code/node_version_test.go::TestResolveNodeVersion_ExactVersion` ### 批量创建命名空间资源 - Capability ID: `rainbond.ns-resource.batch-create` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.NsResourceHandler.CreateNsResource` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestCreateNsResourceBatchAggregatesPartialSuccess`, `api/handler/ns_resource_test.go::TestCreateNsResourceBatchPreservesExplicitNamespace` ### 识别命名空间资源来源 - Capability ID: `rainbond.ns-resource.detect-source` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.detectResourceSource` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestDetectResourceSource` ### 复用命名空间资源处理器单例 - Capability ID: `rainbond.ns-resource.handler-singleton` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `api/handler.GetNsResourceHandler` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestGetNsResourceHandlerSingleton` ### 汇总 Ingress 资源路由元数据 - Capability ID: `rainbond.ns-resource.ingress-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.toNsResourceInfo` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestToNsResourceInfoIncludesIngressSummary` ### 标记命名空间资源来源 - Capability ID: `rainbond.ns-resource.mark-source` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.injectSourceLabel` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestInjectSourceLabelYaml`, `api/handler/ns_resource_test.go::TestInjectSourceLabelManual` ### 解析团队命名空间 - Capability ID: `rainbond.ns-resource.resolve-tenant-namespace` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.(*NsResourceHandler).getTenantNamespace` - 代码路径: `api/handler/ns_resource.go` - 测试路径: `api/handler/ns_resource_test.go::TestGetTenantNamespaceUsesNamespaceField`, `api/handler/ns_resource_test.go::TestGetTenantNamespaceFallsBackToUUIDWhenNamespaceEmpty` ### Distinguish missing node filesystem measurements - Capability ID: `rainbond.overview.disk-availability` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `nodesHandle.ListNodes` - 代码路径: `api/handler/nodes.go`, `api/handler/node_filesystem_stats.go`, `api/model/nodes.go` - 测试路径: `api/handler/overview_truthful_data_test.go::TestOverviewDiskStatsAvailability` ### Empty installed plugin results encode as an array - Capability ID: `rainbond.overview.empty-installed-plugins` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `clusterAction.ListPlugins` - 代码路径: `api/handler/cluster.go` - 测试路径: `api/handler/overview_truthful_data_test.go::TestOverviewEmptyInstalledPluginsAreAnArray` ### Read truthful bounded Kubernetes workload resource snapshots - Capability ID: `rainbond.overview.kubernetes-cluster-resources` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `clusterAction.GetClusterInfo` - 代码路径: `api/handler/cluster.go`, `api/handler/cluster_overview_resources.go`, `api/handler/tenant.go`, `api/model/cluster.go` - 测试路径: `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesUseKubernetesNotPrometheus`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesReportZeroOnlyAfterSuccessfulReads`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesCoalesceConcurrentRefresh`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceRequestsIncludeInitSidecarsAndOverhead`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesPreserveFractionalCapacityAndScheduledScope`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourcesIncludeEmptySchedulableNodes`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceRefreshWaitRespectsCancellation`, `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceOptionalVersionCannotBlockResources` ### Lightweight node health skips optional statistics - Capability ID: `rainbond.overview.lightweight-nodes` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `nodesHandle.ListNodesWithOptions` - 代码路径: `api/handler/nodes.go`, `api/model/nodes.go` - 测试路径: `api/handler/overview_truthful_data_test.go::TestOverviewLightweightNodesSkipStats` ### Preserve node request context and optional statistics default - Capability ID: `rainbond.overview.nodes-request-context` - 状态: `active` - 测试类型: `regression` - 接口类型: `view_endpoint` - 业务入口: `GET /v2/nodes` - 代码路径: `api/controller/nodes.go` - 测试路径: `api/controller/overview_nodes_test.go::TestOverviewNodesRequestPreservesContextAndDefaults` ### Optional local disk sampling never blocks cluster resources - Capability ID: `rainbond.overview.nonblocking-local-disk` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `clusterAction.withLocalDiskStats` - 代码路径: `api/handler/cluster.go`, `api/handler/cluster_overview_resources.go`, `api/model/cluster.go` - 测试路径: `api/handler/overview_truthful_data_test.go::TestOverviewClusterResourceCannotBeBlockedByLocalDisk`, `api/handler/overview_truthful_data_test.go::TestOverviewLocalDiskFailureUsesCooldownAndPreservesStaleSample` ### 解压前清理旧包展开内容 - Capability ID: `rainbond.package-build.clean-extracted-content` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/parser.cleanPackageExtractDir` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/package_archive_test.go::TestCleanPackageExtractDirKeepsSelectedArchiveOnly` ### 优先选择上传压缩包而不是旧解压内容 - Capability ID: `rainbond.package-build.select-archive-over-extracted-content` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/parser.selectPackageArchive` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/package_archive_test.go::TestSelectPackageArchiveSkipsExtractedDirectories` ### 二次上传时选择最新压缩包 - Capability ID: `rainbond.package-build.select-latest-archive` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/parser.selectPackageArchive` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/package_archive_test.go::TestSelectPackageArchiveUsesLatestArchiveForSecondUpload` ### 按包管理器生成安装构建启动命令 - Capability ID: `rainbond.package-manager.commands` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.PackageManagerInfo` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestPackageManagerInfo_GetCommands` ### 无锁文件时默认使用 npm - Capability ID: `rainbond.package-manager.default-npm` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectPackageManager` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestDetectPackageManager_Default` ### 通过锁文件识别包管理器 - Capability ID: `rainbond.package-manager.detect-lockfile` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectPackageManager` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestDetectPackageManager_PNPM`, `builder/parser/code/package_manager_test.go::TestDetectPackageManager_Yarn`, `builder/parser/code/package_manager_test.go::TestDetectPackageManager_NPM` ### 通过 package.json 字段识别包管理器 - Capability ID: `rainbond.package-manager.package-json-field` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectPackageManager` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestDetectPackageManager_PackageManagerField`, `builder/parser/code/package_manager_test.go::TestDetectPackageManager_PackageManagerFieldYarn` ### 解析 packageManager 字段语法 - Capability ID: `rainbond.package-manager.parse-package-manager-field` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.parsePackageManagerField` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestParsePackageManagerField` ### 多锁文件场景下按优先级识别包管理器 - Capability ID: `rainbond.package-manager.priority` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.DetectPackageManager` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestDetectPackageManager_Priority`, `builder/parser/code/package_manager_test.go::TestDetectPackageManager_YarnOverNPM` ### 将包管理器枚举渲染为字符串 - Capability ID: `rainbond.package-manager.stringer` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.PackageManager.String` - 代码路径: `builder/parser/code/package_manager.go` - 测试路径: `builder/parser/code/package_manager_test.go::TestPackageManager_String` ### 检测插件源码目录中是否存在 Dockerfile - Capability ID: `rainbond.plugin-build.detect-dockerfile` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.checkDockerfile` - 代码路径: `builder/exector/plugin_dockerfile.go` - 测试路径: `builder/exector/plugin_dockerfile_test.go::TestCheckDockerfile` ### 在插件镜像构建前拒绝空值或非法镜像引用 - Capability ID: `rainbond.plugin-build.image-input-validate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.exectorManager.run` - 代码路径: `builder/exector/plugin_image.go` - 测试路径: `builder/exector/plugin_image_test.go::TestPluginImageRunRejectsEmptyImageURL` ### 根据源镜像名和版本生成插件镜像标签 - Capability ID: `rainbond.plugin-build.image-tag` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.createPluginImageTag` - 代码路径: `builder/exector/plugin_image.go` - 测试路径: `builder/exector/plugin_image_test.go::TestCreatePluginImageTag` ### Default plugin Dockerfile build arch affinity - Capability ID: `rainbond.plugin-dockerfile-build.default-arch-affinity` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.newBuildKitPodSpec` - 代码路径: `builder/sources/image.go`, `builder/exector/plugin_dockerfile.go`, `api/handler/plugin.go`, `api/model/pluginModel.go` - 测试路径: `builder/sources/image_test.go::TestNewBuildKitPodSpecDefaultsMissingArchToRuntime` ### 缺少 rainbondfile 时返回未找到 - Capability ID: `rainbond.rainbondfile.missing` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ReadRainbondFile` - 代码路径: `builder/parser/code/rainbondfile.go` - 测试路径: `builder/parser/code/rainbondfile_test.go::TestReadRainbondFile_ReturnsNotFoundWhenMissing` ### 解析 rainbondfile YAML 配置 - Capability ID: `rainbond.rainbondfile.parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ReadRainbondFile` - 代码路径: `builder/parser/code/rainbondfile.go` - 测试路径: `builder/parser/code/rainbondfile_test.go::TestReadRainbondFile_ParsesYamlConfig` ### 从项目根目录读取 rainbondfile - Capability ID: `rainbond.rainbondfile.read-project-root` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `builder/parser/code.ReadRainbondFile` - 代码路径: `builder/parser/code/rainbondfile.go` - 测试路径: `builder/parser/code/rainbondfile_test.go::TestReadRainbondFile` ### 仅接受配置的集群 Token - Capability ID: `rainbond.region-api.configured-token-only` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/middleware.FullToken` - 代码路径: `api/middleware/token.go` - 测试路径: `api/middleware/token_test.go::TestFullTokenAllowsOnlyConfiguredRegionToken` ### Delete internal VM image manifest from registry - Capability ID: `rainbond.registry.delete-vm-image-manifest` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.DeleteRegistryImageManifest` - 代码路径: `api/handler/registry_image.go`, `api/controller/registry_image.go`, `api/api_routers/version2/v2Routers.go` - 测试路径: `api/handler/registry_image_test.go::TestDeleteRegistryImageManifestDeletesInternalVMImage`, `api/handler/registry_image_test.go::TestDeleteRegistryImageManifestRejectsExternalRegistry`, `api/handler/registry_image_test.go::TestDeleteRegistryImageManifestTreatsMissingManifestAsDeleted` ### 备份校验支持 OCI 镜像清单 - Capability ID: `rainbond.registry.manifest-exists-oci` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources/registry.Registry.ManifestExists` - 代码路径: `builder/sources/registry/manifest.go` - 测试路径: `builder/sources/registry/manifest_test.go::TestManifestExistsAcceptsOCIManifestTypes` ### 收集 Ingress 后端服务名 - Capability ID: `rainbond.resource-center.collect-ingress-services` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.collectIngressServiceNames` - 代码路径: `api/handler/resource_center.go` - 测试路径: `api/handler/resource_center_test.go::TestCollectIngressServiceNames` ### 汇总资源事件信息 - Capability ID: `rainbond.resource-center.event-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.toResourceEventInfo` - 代码路径: `api/handler/resource_center.go` - 测试路径: `api/handler/resource_center_test.go::TestToResourceEventInfo` ### 按选择器匹配资源标签 - Capability ID: `rainbond.resource-center.match-selector` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.labelsMatchSelector` - 代码路径: `api/handler/resource_center.go` - 测试路径: `api/handler/resource_center_test.go::TestLabelsMatchSelector` ### Serialize resource center timestamps as RFC3339 - Capability ID: `rainbond.resource-center.rfc3339-timestamps` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.formatResourceTimestamp` - 代码路径: `api/handler/resource_center.go`, `api/handler/ns_resource.go` - 测试路径: `api/handler/resource_center_test.go::TestFormatResourceTimestamp` ### 将 DaemonSet 导入为组件 - Capability ID: `rainbond.resource-import.daemonset-component` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api.handler.ComponentController.CreateComponent` - 代码路径: `api/handler/resource_import.go`, `api/model/namespace_resource.go` - 测试路径: `api/handler/resource_import_daemonset_test.go::TestExtendMethodForResourceTypeSupportsDaemonSet` ### 复合语言场景使用 Node 运行时解析 - Capability ID: `rainbond.runtime.composite-nodejs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.CheckRuntime` - 代码路径: `builder/parser/code/runtime.go` - 测试路径: `builder/parser/code/runtime_test.go::TestCheckRuntime_CompositeNodejsLanguageUsesNodeRuntime` ### CNB 构建检测 Node.js 框架信息 - Capability ID: `rainbond.runtime.node-cnb-framework-detection` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/parser/code.CheckRuntimeByStrategy` - 代码路径: `builder/parser/code/runtime.go` - 测试路径: `builder/parser/code/runtime_test.go::TestCheckRuntimeByStrategy_NodejsCNBDetectsFrameworkWithoutEngines` ### 从 package.json 返回默认 Node 运行时信息 - Capability ID: `rainbond.runtime.node-defaults` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.CheckRuntime` - 代码路径: `builder/parser/code/runtime.go` - 测试路径: `builder/parser/code/runtime_test.go::TestCheckRuntime_NodejsReturnsDefaultRuntimeInfoFromPackageJson` ### 静态语言返回空运行时信息 - Capability ID: `rainbond.runtime.static-empty` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.CheckRuntime` - 代码路径: `builder/parser/code/runtime.go` - 测试路径: `builder/parser/code/runtime_test.go::TestCheckRuntime_StaticReturnsEmptyRuntimeInfo` ### 服务检测完成摘要日志反映真实检测状态 - Capability ID: `rainbond.service-check.completion-log-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `builder/exector.serviceCheckCompletionLogSummary` - 代码路径: `builder/exector/service_check.go` - 测试路径: `builder/exector/service_check_test.go::TestServiceCheckCompletionLogSummary` ### 将服务检测进度消息同步写入事件日志 - Capability ID: `rainbond.service-check.eventlog-progress` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `builder/exector.logServiceCheckProgress` - 代码路径: `builder/exector/service_check.go` - 测试路径: `builder/exector/service_check_test.go::TestLogServiceCheckProgressMirrorsMessageToEventLogger` ### 协调重复的组件探针模式 - Capability ID: `rainbond.service-probe.reconcile-duplicate-mode` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.ServiceProbeDaoImpl.AddModel` - 代码路径: `db/mysql/dao/k8s.go` - 测试路径: `db/mysql/dao/service_probe_test.go::TestServiceProbeDaoAddModelReconcilesExistingMode` ### DaemonSet 组件类型分类 - Capability ID: `rainbond.service-type.daemonset` - 状态: `active` - 测试类型: `regression` - 接口类型: `service_method` - 业务入口: `db.model.ServiceType` - 代码路径: `db/model/tenant.go` - 测试路径: `db/model/tenant_daemonset_test.go::TestServiceTypeDaemonSetClassification` ### 构建带路径分隔符的安全文件管理列表命令 - Capability ID: `rainbond.service.file-manage-command-safety` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `api/handler.buildFileManageListCommand` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_file_manage_test.go::TestBuildFileManageListCommand` ### 文件管理列表失败时保留 exec 的 stderr 细节 - Capability ID: `rainbond.service.file-manage-exec-error-detail` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `api/handler.wrapFileManageExecError` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_file_manage_test.go::TestWrapFileManageExecErrorIncludesStderr` ### Keep repeated external port closes idempotent - Capability ID: `rainbond.service.port-outer-idempotent-close` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.(*ServiceAction).PortOuter` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_port_outer_test.go::TestServiceActionPortOuterAlreadyClosedReturnsPort` ### 镜像分享使用请求中的快照部署版本 - Capability ID: `rainbond.share.image-from-snapshot-deploy-version` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler/share.ServiceShareHandle.Share` - 代码路径: `api/handler/share/service_share.go` - 测试路径: `api/handler/share/service_share_test.go::TestServiceShareUsesRequestedDeployVersionForImageShare` ### Slug 分享使用请求中的快照部署版本 - Capability ID: `rainbond.share.slug-from-snapshot-deploy-version` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler/share.ServiceShareHandle.Share` - 代码路径: `api/handler/share/service_share.go` - 测试路径: `api/handler/share/service_share_test.go::TestServiceShareUsesRequestedDeployVersionForSlugShare` ### 为多语言项目应用默认 CNB 端口 - Capability ID: `rainbond.source-args.default-cnb-ports` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.applyCNBDefaultPorts` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/source_code_args_test.go::TestCNBDefaultPorts_MultiLanguage` ### 为多语言项目解析源码构建参数 - Capability ID: `rainbond.source-args.multi-language` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.SourceCodeParse.GetArgs` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/source_code_args_test.go::TestGetArgs_MultiLanguage` ### 识别子目录中的 Dockerfile - Capability ID: `rainbond.source-detect.dockerfile-subdir` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetLangType` - 代码路径: `builder/parser/code/lang.go` - 测试路径: `builder/parser/code/language_matrix_test.go::TestGetLangType_DetectsDockerfileInSubDirectory` ### 识别隐藏目录中的 Dockerfile - Capability ID: `rainbond.source-detect.hidden-dockerfiles` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.FindDockerfiles` - 代码路径: `builder/parser/code/lang.go` - 测试路径: `builder/parser/code/lang_test.go::TestFindDockerfilesInHiddenDirs` ### 扫描 Dockerfile 时忽略排除目录 - Capability ID: `rainbond.source-detect.ignore-excluded-dirs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.FindDockerfiles` - 代码路径: `builder/parser/code/lang.go` - 测试路径: `builder/parser/code/lang_test.go::TestFindDockerfilesIgnoreSpecificDirs` ### 识别支持的源码构建语言矩阵 - Capability ID: `rainbond.source-detect.language-matrix` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetLangType` - 代码路径: `builder/parser/code/lang.go` - 测试路径: `builder/parser/code/language_matrix_test.go::TestGetLangType_SupportedSourceBuildLanguages` ### Preserve Dockerfile detection for Maven modules - Capability ID: `rainbond.source-detect.multi-module-dockerfile` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser.SourceCodeParse.GetServiceInfo` - 代码路径: `builder/parser/source_code.go` - 测试路径: `builder/parser/source_code_args_test.go::TestGetServiceInfo_MultiModulesPreserveDockerfileDetection` ### 存在 package.json 时优先识别为 Node.js - Capability ID: `rainbond.source-detect.nodejs-over-static` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/code.GetLangType` - 代码路径: `builder/parser/code/lang.go` - 测试路径: `builder/parser/code/language_matrix_test.go::TestGetLangType_NodeJsWinsOverStaticWhenPackageJsonExists` ### 配置 parser 的 etcd 发现器并在无客户端时保护抓取逻辑 - Capability ID: `rainbond.source-discovery.etcd-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/discovery.NewEtcd` - 代码路径: `builder/parser/discovery/etcd.go` - 测试路径: `builder/parser/discovery/etcd_test.go::TestNewEtcdAndFetchGuard` ### 对不支持的 parser 发现类型返回空发现器 - Capability ID: `rainbond.source-discovery.unsupported-type` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/parser/discovery.NewDiscoverier` - 代码路径: `builder/parser/discovery/discovery.go` - 测试路径: `builder/parser/discovery/discovery_unit_test.go::TestNewDiscoverierUnsupportedType` ### 将镜像仓库认证信息编码为 base64 JSON 载荷 - Capability ID: `rainbond.source-image.auth-base64-encode` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.EncodeAuthToBase64` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestEncodeAuthToBase64` ### 从归档文件导入镜像 - Capability ID: `rainbond.source-image.import` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.ImageImport` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestImageImport` ### 将多个镜像保存为归档文件 - Capability ID: `rainbond.source-image.multi-save` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.MultiImageSave` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestMulitImageSave` ### 解析镜像仓库主机名镜像名与标签 - Capability ID: `rainbond.source-image.parse-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.ImageNameHandle` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestImageName` ### 解析带显式仓库命名空间的镜像引用 - Capability ID: `rainbond.source-image.parse-name-with-namespace` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.ImageNameWithNamespaceHandle` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestImageNameWithNamespace` ### 将镜像保存为归档文件 - Capability ID: `rainbond.source-image.save` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.ImageSave` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestImageSave` ### 从规范化镜像引用中提取标签 - Capability ID: `rainbond.source-image.tag-from-ref` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.GetTagFromNamedRef` - 代码路径: `builder/sources/registry.go` - 测试路径: `builder/sources/registry_test.go::TestGetTagFromNamedRef` ### 校验受信任的镜像仓库 - Capability ID: `rainbond.source-image.trusted-registry-check` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.CheckTrustedRepositories` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestCheckTrustedRepositories` ### 为绑定主机的 VM 构建 Pod 添加通配容忍 - Capability ID: `rainbond.source-image.vm-build-host-taint-toleration` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/sources.newBuildKitPodSpec` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestNewBuildKitPodSpecAddsTolerationForHostScheduling` ### 构建包含净化地址与构建子目录的仓库元数据 - Capability ID: `rainbond.source-repo.build-info` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.CreateRepostoryBuildInfo` - 代码路径: `builder/sources/repo.go` - 测试路径: `builder/sources/repo_test.go::TestCreateRepostoryBuildInfo` ### 根据仓库分支租户与服务解析源码缓存目录 - Capability ID: `rainbond.source-repo.cache-dir` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.GetCodeSourceDir` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/file_test.go::TestGetCodeSourceDirUsesSourceDirEnv`, `builder/sources/git_test.go::TestGetCodeCacheDir` ### 克隆 Git 源码仓库 - Capability ID: `rainbond.source-repo.clone` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.GitClone` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGitClone` ### 按标签克隆 Git 源码仓库 - Capability ID: `rainbond.source-repo.clone-by-tag` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.GitClone` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGitCloneByTag` ### 将分支和标签输入映射为 git 引用名 - Capability ID: `rainbond.source-repo.git-ref-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.getBranch` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGetBranch` ### 通过标准代理拉取 HTTPS Git 仓库 - Capability ID: `rainbond.source-repo.https-proxy` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/sources.newGitCloneHTTPClient` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestNewGitCloneHTTPClientProxy` ### 拉取 Git 源码仓库 - Capability ID: `rainbond.source-repo.pull` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.GitPull` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGitPull` ### 拉取或克隆 Git 源码仓库 - Capability ID: `rainbond.source-repo.pull-or-clone` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `builder/sources.GitCloneOrPull` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGitPullOrClone` ### 从仓库展示地址中去除凭据 - Capability ID: `rainbond.source-repo.show-url` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.getShowURL` - 代码路径: `builder/sources/git.go` - 测试路径: `builder/sources/git_test.go::TestGetShowURL` ### 为源码任务创建独立的临时仓库工作目录 - Capability ID: `rainbond.source-repo.temp-build-info` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.CreateTempRepostoryBuildInfo` - 代码路径: `builder/sources/repo.go` - 测试路径: `builder/sources/repo_test.go::TestCreateTempRepostoryBuildInfo` ### 为 pkg 构建创建临时工作目录信息时保持原始路径 - Capability ID: `rainbond.source-repo.temp-build-info-pkg` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.CreateTempRepostoryBuildInfo` - 代码路径: `builder/sources/repo.go` - 测试路径: `builder/sources/repo_test.go::TestCreateTempRepostoryBuildInfoForPkg` ### 安全关闭零值 SFTP 客户端 - Capability ID: `rainbond.source-sftp.close-safe` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.SFTPClient.Close` - 代码路径: `builder/sources/sftp.go` - 测试路径: `builder/sources/sftp_test.go::TestSFTPClientCloseZeroValue` ### 解析 SFTP 端口并提供合理默认值 - Capability ID: `rainbond.source-sftp.port-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.parseSFTPPort` - 代码路径: `builder/sources/sftp.go` - 测试路径: `builder/sources/sftp_test.go::TestParseSFTPPort` ### 解析 SVN 分支标签与 trunk 的目标路径 - Capability ID: `rainbond.source-svn.branch-path` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/sources.getBranchPath` - 代码路径: `builder/sources/svn.go` - 测试路径: `builder/sources/svn_test.go::TestGetBranchPath` ### Require complete scoped S3 chunk deletion acknowledgements - Capability ID: `rainbond.storage.chunk-cleanup-confirmation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `storage.S3Storage.CleanupChunks` - 代码路径: `pkg/component/storage/chunk_cleanup_s3.go` - 测试路径: `pkg/component/storage/chunk_cleanup_s3_test.go::TestChunkCleanupRequiresCompleteScopedAcknowledgements` ### Measure complete scoped S3 upload chunk sizes - Capability ID: `rainbond.storage.chunk-size-inventory` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `S3Storage.MeasureUploadChunks` - 代码路径: `pkg/component/storage/chunk_inventory.go`, `pkg/component/storage/chunk_cleanup_s3.go` - 测试路径: `pkg/component/storage/chunk_inventory_test.go::TestUploadChunkUsageRequiresCompletePhysicalInventory` ### 汇总存储类信息 - Capability ID: `rainbond.storage.class-summary` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler.StorageClassInfo` - 代码路径: `api/handler/storage.go` - 测试路径: `api/handler/storage_test.go::TestStorageClassInfoFields` ### 复用存储处理器单例 - Capability ID: `rainbond.storage.handler-singleton` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `api/handler.GetStorageHandler` - 代码路径: `api/handler/storage.go` - 测试路径: `api/handler/storage_test.go::TestGetStorageHandlerSingleton` ### Measure local upload chunks without following symbolic links - Capability ID: `rainbond.storage.local-chunk-size-inventory` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `LocalStorage.MeasureUploadChunks` - 代码路径: `pkg/component/storage/chunk_inventory.go` - 测试路径: `pkg/component/storage/chunk_inventory_test.go::TestLocalUploadChunkUsageReadsFilesWithoutFollowingLinks` ### Delete all owned MinIO upload chunks while preserving a sibling session - Capability ID: `rainbond.storage.minio-chunk-cleanup` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `storage.S3Storage.CleanupChunks` - 代码路径: `pkg/component/storage/chunk_cleanup_s3.go` - 测试路径: `pkg/component/storage/chunk_cleanup_minio_test.go::TestMinIOChunkCleanupOwnsExactSession` ### Never print storage access or secret keys at startup - Capability ID: `rainbond.storage.no-credential-startup-logs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `storage.Component.Start` - 代码路径: `pkg/component/storage/storage.go` - 测试路径: `pkg/component/storage/credential_logging_test.go::TestStorageStartupDoesNotLogCredentials` ### S3 生命周期已配置时不再输出 info 日志 - Capability ID: `rainbond.storage.s3-lifecycle-skip-logs` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `pkg/component/storage.(*S3Storage).ensureBucketLifecycle` - 代码路径: `pkg/component/storage/s3_storage.go` - 测试路径: `pkg/component/storage/s3_storage_test.go::TestEnsureBucketExistsDoesNotLogInfoWhenLifecycleAlreadyConfigured` ### Bind native chunk storage without exposing credentials - Capability ID: `rainbond.storage.upload-chunk-binding` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `Component.UploadChunkBinding` - 代码路径: `pkg/component/storage/upload_binding.go` - 测试路径: `pkg/component/storage/upload_binding_test.go::TestUploadStorageBindingChangesWithTargetWithoutExposingCredentials` ### Measure scoped upload packages including extracted files - Capability ID: `rainbond.storage.upload-package-size` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `storage.MeasureUploadEvent` - 代码路径: `pkg/component/storage/upload_package_inventory.go`, `api/controller/cleanup_upload_inventory.go` - 测试路径: `pkg/component/storage/upload_package_inventory_test.go::TestUploadPackageSizeIsScopedAndIncludesExtractedFiles`, `pkg/component/storage/upload_package_inventory_test.go::TestS3UploadPackageMeasurementUsesExactEventPrefix` ### Skip cluster scans when tenant limit records are complete - Capability ID: `rainbond.tenant-resources.skip-unused-cluster-scans` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.TenantAction.GetTenantsResources` - 代码路径: `api/handler/tenant.go` - 测试路径: `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesWithLimitsSkipsClusterReads`, `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesWithLimitsDoesNotWaitForClusterCache`, `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesMissingLimitsUsesOneClusterFallback`, `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesEmptyIDsSkipsDownstreamCalls`, `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesPreservesDAOErrors`, `api/handler/tenant_resources_performance_test.go::TestGetTenantsResourcesPreservesZeroFallbackAfterKubernetesFailure` ### 构造并校验第三方组件端点地址 - Capability ID: `rainbond.third-component.endpoint-address-construct` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.NewEndpointAddress` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestNewEndpointAddress` ### 解析端点 IP 与域名哨兵地址 - Capability ID: `rainbond.third-component.endpoint-address-ip` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.EndpointAddress.GetIP` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressGetIP` ### 从第三方组件端点地址中解析有效端口 - Capability ID: `rainbond.third-component.endpoint-address-port` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.EndpointAddress.GetPort` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressGetPort` ### 为第三方组件端点地址补齐默认 HTTP 协议 - Capability ID: `rainbond.third-component.endpoint-address-scheme` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.EndpointAddress.EnsureScheme` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestEndpointAddressEnsureScheme` ### 比较第三方组件处理器在不同探测模式下的相等性 - Capability ID: `rainbond.third-component.handler-equals` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.Handler.Equals` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestHandlerEquals` ### 比较 HTTP 探测处理器及其请求头集合 - Capability ID: `rainbond.third-component.http-get-equals` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HTTPGetAction.Equals` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestHTTPGetActionEquals` ### 暴露第三方组件身份与端点标识辅助函数 - Capability ID: `rainbond.third-component.identity-fields` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.ThirdComponent.GetEndpointID` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentIdentityHelpers` ### 拆分旧式第三方组件端点的主机与端口对 - Capability ID: `rainbond.third-component.legacy-endpoint-port` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.ThirdComponentEndpoint.GetPort` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentEndpointGetPortAndIP` ### 比较第三方组件探测定义是否相等 - Capability ID: `rainbond.third-component.probe-equals` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.Probe.Equals` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestProbeEquals` ### 判断第三方组件是否需要主动探测 - Capability ID: `rainbond.third-component.probe-required` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.ThirdComponentSpec.NeedProbe` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentSpecNeedProbe` ### 检测第三方组件是否使用静态端点 - Capability ID: `rainbond.third-component.static-endpoints-detect` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.ThirdComponentSpec.IsStaticEndpoints` - 代码路径: `pkg/apis/rainbond/v1alpha1/third_component.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/third_component_unit_test.go::TestThirdComponentSpecIsStaticEndpoints` ### Aggregate ConfigMap create/update errors during upgrade - Capability ID: `rainbond.upgrade-configmap-aggregates-create-update-errors` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeConfigMap` - 代码路径: `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/controller/upgrade_test.go::TestUpgradeConfigMapErrorAggregation` ### Aggregate Service create/update errors during upgrade - Capability ID: `rainbond.upgrade-service-aggregates-create-update-errors` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/controller.upgradeController.upgradeService` - 代码路径: `worker/appm/controller/upgrade.go` - 测试路径: `worker/appm/controller/upgrade_test.go::TestUpgradeServiceErrorAggregation` ### 对字符串切片去重并保留非空元素 - Capability ID: `rainbond.util.array-deduplicate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.Deweight` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestDeweight` ### 比较字节切片是否完全相等并区分 nil 情况 - Capability ID: `rainbond.util.bytes-equality` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.BytesSliceEqual` - 代码路径: `util/bytes.go` - 测试路径: `util/bytes_test.go::TestBytesSliceEqual` ### 使用零拷贝辅助将字节切片转换为字符串 - Capability ID: `rainbond.util.bytes-to-string` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.ToString` - 代码路径: `util/string.go` - 测试路径: `util/bytes_test.go::TestToString` ### 覆盖哈希IP字符串反转与时间版本等核心辅助行为 - Capability ID: `rainbond.util.core-helpers.hash-ip-string-uuid` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CreateFileHash` - 代码路径: `util/hash.go`, `util/ip.go`, `util/string.go`, `util/uuid.go` - 测试路径: `util/hash_test.go::TestCreateFileHash`, `util/ip_test.go::TestCheckIP`, `util/string_test.go::TestReverse`, `util/uuid_test.go::TestTimeVersion` ### 从原始字符串生成稳定的 md5 哈希 - Capability ID: `rainbond.util.core-helpers.hash-string` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CreateHashString` - 代码路径: `util/hash.go` - 测试路径: `util/hash_test.go::TestCreateHashString` ### 检查字符串切片中的成员是否存在 - Capability ID: `rainbond.util.core-helpers.string-contains` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.StringArrayContains` - 代码路径: `util/string.go` - 测试路径: `util/string_test.go::TestStringArrayContains` ### 返回规范化的当前工作目录路径 - Capability ID: `rainbond.util.current-dir-path` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetCurrentDir` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetCurrentDir` ### 按目标深度列出嵌套目录 - Capability ID: `rainbond.util.dir-list-depth` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetDirList` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetDirList` ### 按目标深度列出目录名称 - Capability ID: `rainbond.util.dir-name-list` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetDirNameList` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetDirNameList` ### 使用 shell du 命令计算目录大小 - Capability ID: `rainbond.util.dir-size-shell` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetDirSizeByCmd` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetDirSizeByCmd` ### 通过递归遍历文件计算目录大小 - Capability ID: `rainbond.util.dir-size-walk` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetDirSize` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetDirSize` ### 在环境变量为空时返回默认值 - Capability ID: `rainbond.util.env-default` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetenvDefault` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetenvDefault` ### 从 etcd 风格键中提取稳定 ID - Capability ID: `rainbond.util.etcd-key-id-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetIDFromKey` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetIDFromKey` ### 复制文件并保留内容与元数据 - Capability ID: `rainbond.util.file-copy` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CopyFile` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestCopyFile` ### 按目标深度递归列出文件 - Capability ID: `rainbond.util.file-list-depth` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.GetFileList` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetFileList` ### 处理文件创建复制归档合并遍历与目录大小辅助操作 - Capability ID: `rainbond.util.fs.archive-and-directory-ops` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.OpenOrCreateFile` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestOpenOrCreateFile` ### 在候选列表中查找模糊匹配 - Capability ID: `rainbond.util.fuzzy.find` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/fuzzy.Find` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestFind` ### 在候选列表中按大小写不敏感方式查找模糊匹配 - Capability ID: `rainbond.util.fuzzy.find-fold` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/fuzzy.FindFold` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestFindFold` ### 计算字符串之间的 Levenshtein 编辑距离 - Capability ID: `rainbond.util.fuzzy.levenshtein-distance` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/fuzzy.LevenshteinDistance` - 代码路径: `util/fuzzy/levenshtein.go` - 测试路径: `util/fuzzy/levenshtein_test.go::TestLevenshteinDistance` ### 模糊匹配单个候选字符串 - Capability ID: `rainbond.util.fuzzy.match` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/fuzzy.Match` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestMatch` ### 执行大小写不敏感的模糊子序列匹配 - Capability ID: `rainbond.util.fuzzy.match-fold` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/fuzzy.MatchFold` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestMatchFold` ### 对候选列表中的模糊匹配结果排序 - Capability ID: `rainbond.util.fuzzy.rank-find` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/fuzzy.RankFind` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestRankFind` ### 按编辑距离对大小写不敏感的模糊匹配结果排序 - Capability ID: `rainbond.util.fuzzy.rank-find-fold` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/fuzzy.RankFindFold` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestRankFindFold` ### 按删除距离为模糊匹配结果打分 - Capability ID: `rainbond.util.fuzzy.rank-match` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/fuzzy.RankMatch` - 代码路径: `util/fuzzy/fuzzy.go` - 测试路径: `util/fuzzy/fuzzy_test.go::TestRankMatch` ### 返回显式环境变量值或后备默认值 - Capability ID: `rainbond.util.getenv` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.Getenv` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestGetenv` ### 根据机器状态生成稳定的主机标识 - Capability ID: `rainbond.util.host-id-generate` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CreateHostID` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestCreateHostID` ### 在网卡地址扫描中过滤回环与非 IP 地址 - Capability ID: `rainbond.util.network.interface-address-filter` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.checkIPAddress` - 代码路径: `util/ippool.go` - 测试路径: `util/ippool_test.go::TestCheckIPAddress` ### 管理探测状态 watcher 并分发健康更新 - Capability ID: `rainbond.util.prober.manage-service-health-watchers` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/prober.probeManager.handleStatus` - 代码路径: `util/prober/manager.go` - 测试路径: `util/prober/manager_test.go::TestProbeManager_Start` ### 选择 SSH 鉴权方式并拒绝不支持的认证模式 - Capability ID: `rainbond.util.ssh.auth-method-selection` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.NewSSHClient` - 代码路径: `util/sshclient.go` - 测试路径: `util/sshclient_test.go::TestNewSSHClientSelectsAuthMethod` ### 检测状态组件名称中的数字后缀 - Capability ID: `rainbond.util.statefulset-suffix-detect` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.IsEndWithNumber` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestIsEndWithNumber` ### 使用辅助函数将字符串转换为字节切片 - Capability ID: `rainbond.util.string-to-bytes` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.ToByte` - 代码路径: `util/string.go` - 测试路径: `util/bytes_test.go::TestToByte` ### 提供主机标识版本当前目录变量替换与时间格式化辅助能力 - Capability ID: `rainbond.util.system.identity-and-template-helpers` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CreateHostID` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestDeweight` ### 根据配置映射展开带默认值的模板变量 - Capability ID: `rainbond.util.template-variable-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.ParseVariable` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestParseVariable` ### 渲染布尔表格单元格 - Capability ID: `rainbond.util.termtables.render-bool-cell` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderBool` ### 按配置填充表格单元格 - Capability ID: `rainbond.util.termtables.render-cell-padding` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderPadding` ### 渲染浮点表格单元格 - Capability ID: `rainbond.util.termtables.render-float-cell` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderFloat` ### 渲染通用表格单元格值 - Capability ID: `rainbond.util.termtables.render-generic-cell` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderGeneric` ### 渲染带显式对齐的 HTML 表格 - Capability ID: `rainbond.util.termtables.render-html-alignment` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.RenderHTML` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableWithAlignment` ### 以替代标题样式渲染 HTML 表格 - Capability ID: `rainbond.util.termtables.render-html-alt-title-style` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.SetHTMLStyleTitle` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableWithAltTitleStyle` ### 将 SetAlign 应用于 HTML 表格渲染 - Capability ID: `rainbond.util.termtables.render-html-set-align` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.SetAlign` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableAfterSetAlign` ### 渲染带标题与对齐能力的 HTML 表格输出 - Capability ID: `rainbond.util.termtables.render-html-table` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestCreateTableHTML` ### 渲染带标题的 HTML 表格 - Capability ID: `rainbond.util.termtables.render-html-title` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.RenderHTML` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableWithHeaderHTML` ### 按宽度展开 HTML 表格标题 - Capability ID: `rainbond.util.termtables.render-html-title-width` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.RenderHTML` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableTitleWidthAdjustsHTML` ### 渲染带 Unicode 宽度的 HTML 表格 - Capability ID: `rainbond.util.termtables.render-html-unicode-widths` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.RenderHTML` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableUnicodeWidthsHTML` ### 渲染无表头的 HTML 表格 - Capability ID: `rainbond.util.termtables.render-html-without-headers` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.RenderHTML` - 代码路径: `util/termtables/html.go` - 测试路径: `util/termtables/html_test.go::TestTableWithNoHeadersHTML` ### 渲染整数表格单元格 - Capability ID: `rainbond.util.termtables.render-integer-cell` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderInteger` ### 渲染 Markdown 表格输出 - Capability ID: `rainbond.util.termtables.render-markdown-table` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableInMarkdown` ### 按列宽填充渲染后的表格行 - Capability ID: `rainbond.util.termtables.render-row-width-padding` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Row.Render` - 代码路径: `util/termtables/row.go` - 测试路径: `util/termtables/row_test.go::TestRowRenderWidthBasedPadding` ### 渲染 Stringer 表格单元格 - Capability ID: `rainbond.util.termtables.render-stringer-cell` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Cell.Render` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestCellRenderStringerStruct` ### 渲染带宽度与 Unicode 处理的终端与 Markdown 表格 - Capability ID: `rainbond.util.termtables.render-text-table` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go`, `util/termtables/cell.go`, `util/termtables/row.go` - 测试路径: `util/termtables/table_test.go::TestCreateTable`, `util/termtables/cell_test.go::TestCellRenderString`, `util/termtables/row_test.go::TestBasicRowRender` ### 在多次 AddHeaders 调用中追加表头 - Capability ID: `rainbond.util.termtables.render-text-table-append-headers` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.AddHeaders` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableMultipleAddHeader` ### 渲染含 CJK 字符的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-cjk` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestCJKChars` ### 按表头宽度扩展文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-header-width` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableHeaderWidthAdjusts` ### 渲染缺失尾部单元格的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-missing-cells` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableMissingCells` ### 在添加行后应用列对齐 - Capability ID: `rainbond.util.termtables.render-text-table-post-align` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.SetAlign` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableAlignPostsetting` ### 重复渲染时保持表头一致 - Capability ID: `rainbond.util.termtables.render-text-table-repeatable` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWithHeaderMultipleTimes` ### 将表格样式重置为 ASCII 渲染 - Capability ID: `rainbond.util.termtables.render-text-table-style-reset` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestStyleResets` ### 按 Unicode 宽度渲染文本表格标题 - Capability ID: `rainbond.util.termtables.render-text-table-title-unicode-width` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTitleUnicodeWidths` ### 按标题宽度扩展文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-title-width` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableTitleWidthAdjusts` ### 渲染带 Unicode 宽度的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-unicode-widths` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableUnicodeWidths` ### 使用 UTF-8 边框渲染文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-utf8-box` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableInUTF8` ### 渲染带终端颜色控制序列的 UTF-8 文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-utf8-sgr` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableUnicodeUTF8AndSGR` ### 在多行之间平衡文本表格宽度 - Capability ID: `rainbond.util.termtables.render-text-table-width-balance` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWidthHandling` ### 处理第二类文本表格宽度平衡场景 - Capability ID: `rainbond.util.termtables.render-text-table-width-balance-second` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWidthHandling_SecondErrorCondition` ### 渲染含组合字符的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-with-combining-chars` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWithCombiningChars` ### 渲染含全角字符的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-with-fullwidth-chars` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWithFullwidthChars` ### 渲染带标题的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-with-title` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWithHeader` ### 渲染无表头的文本表格 - Capability ID: `rainbond.util.termtables.render-text-table-without-headers` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.Table.Render` - 代码路径: `util/termtables/table.go` - 测试路径: `util/termtables/table_test.go::TestTableWithNoHeaders` ### 移除单元格内容中的 ANSI 颜色码 - Capability ID: `rainbond.util.termtables.strip-color-codes` - 状态: `active` - 测试类型: `unit` - 接口类型: `workflow` - 业务入口: `util/termtables.filterColorCodes` - 代码路径: `util/termtables/cell.go` - 测试路径: `util/termtables/cell_test.go::TestFilterColorCodes` ### 将解析后的时间格式化为 RFC3339 字符串 - Capability ID: `rainbond.util.time-format-rfc3339` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `time.Format` - 代码路径: `util/comman_test.go` - 测试路径: `util/comman_test.go::TestTimeFormat` ### 生成基于时间戳的版本字符串 - Capability ID: `rainbond.util.version-timestamp` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.CreateVersionByTime` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestCreateVersionByTime` ### 从字符串切片中过滤空白与仅空格项 - Capability ID: `rainbond.util.whitespace-filter` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.RemoveSpaces` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestRemoveSpaces` ### 将目录归档为 zip 文件 - Capability ID: `rainbond.util.zip-archive` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.Zip` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestZip` ### 检测 zip 归档是否共享公共根目录 - Capability ID: `rainbond.util.zip-structure-detect` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util.detectZipStructure` - 代码路径: `util/comman.go` - 测试路径: `util/comman_test.go::TestDetectZipStructure` ### 版本提交信息安全截断并完成构建入库 - Capability ID: `rainbond.version.commit-message-utf8` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `VersionInfoDaoImpl.AddModel/UpdateModel` - 代码路径: `db/mysql/dao/version.go` - 测试路径: `db/mysql/dao/version_commit_msg_test.go::TestTruncateVersionCommitMsg`, `db/mysql/dao/version_commit_msg_test.go::TestTruncateVersionCommitMsgMalformedInputDoesNotPanic`, `db/mysql/dao/version_commit_msg_test.go::TestVersionCommitMsgPersistence`, `db/mysql/dao/version_commit_msg_test.go::FuzzTruncateVersionCommitMsg` ### 增加虚拟机 BuildKit 启动等待次数 - Capability ID: `rainbond.vm-build.buildkit-startup-retry` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/sources.buildctlConnectRetriesMax` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestBuildctlConnectRetriesMaxUsesLongerDefaultForVMBuild`, `builder/sources/image_test.go::TestBuildctlConnectRetriesMaxPreservesExplicitEnv` ### 保留失败的虚拟机构建 Pod 便于诊断 - Capability ID: `rainbond.vm-build.retain-failed-build-pod` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/sources.shouldRetainFailedBuildKitJob` - 代码路径: `builder/sources/image.go` - 测试路径: `builder/sources/image_test.go::TestShouldRetainFailedBuildKitJobByDefault`, `builder/sources/image_test.go::TestShouldRetainFailedBuildKitJobCanBeDisabled` ### 将 VM 配置文件卷注入为 guest 可见的 ConfigMap 配置盘 - Capability ID: `rainbond.vm-config-file-injected-as-configmap-volume` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ConfigFileVolume.CreateVolume` - 代码路径: `worker/appm/volume/config-file.go`, `worker/appm/volume/volume.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestConfigFileVolumeCreateVolumeForVMBuildsGuestVisibleConfigDisk` ### 创建 VMExport 并返回系统盘下载地址 - Capability ID: `rainbond.vm-export.root-disk-url` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.VMExportHandler` - 代码路径: `api/handler/vm_export.go` - 测试路径: `api/handler/vm_export_test.go::TestCreateVMExport`, `api/handler/vm_export_test.go::TestGetVMExport` ### 热添加虚拟机磁盘时在冲突后重试 - Capability ID: `rainbond.vm-hotplug.add-volume-conflict-retry` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.hotplugVMDataDisk` - 代码路径: `api/handler/service_vm_hotplug.go` - 测试路径: `api/handler/service_vm_hotplug_test.go::TestPerformVMHotplugAddVolumeRetriesConflicts` ### 使用 Gi 容量创建虚拟机热插数据卷 - Capability ID: `rainbond.vm-hotplug.data-volume-capacity-gi` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.buildVMHotplugDataVolumeObject` - 代码路径: `api/handler/service_vm_hotplug.go` - 测试路径: `api/handler/service_vm_hotplug_test.go::TestBuildVMHotplugDataVolumeObjectUsesGiCapacity` ### 删除存储时热移除运行中虚拟机的数据磁盘 - Capability ID: `rainbond.vm-hotplug.remove-volume-running-vm` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.VolumnVar` - 代码路径: `api/handler/service.go`, `api/handler/service_vm_hotplug.go` - 测试路径: `api/handler/service_vm_hotplug_test.go::TestHotunplugVMDataDiskRemovesVolumeFromRunningVM`, `api/handler/service_vm_hotplug_test.go::TestHotunplugVMDataDiskDeletesBackingDataVolumeAndPVC`, `api/handler/service_vm_hotplug_test.go::TestVolumnVarDeleteHotunplugsRunningVMDataDisk` ### 通过 registry DataVolume 导入虚拟机系统盘 - Capability ID: `rainbond.vm-import.registry-datavolume` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.BuildVMDataVolumeTemplate` - 代码路径: `worker/appm/volume/vm_import.go` - 测试路径: `worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplate`, `worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplateAddsDockerSchemeWhenMissing`, `worker/appm/volume/vm_import_test.go::TestBuildVMRegistryImportDataVolumeTemplatePrefixesInternalRegistryForShortImage` ### Reject malformed VM registry image references - Capability ID: `rainbond.vm-import.registry-reference-validation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.normalizeVMRegistryImportURL` - 代码路径: `worker/appm/volume/vm_import.go`, `worker/appm/volume/share-file.go` - 测试路径: `worker/appm/volume/vm_import_test.go::TestNormalizeVMRegistryImportURLRejectsInvalidReference` ### Abort VM definition for invalid registry imports - Capability ID: `rainbond.vm-import.validation-aborts-vm-definition` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.createVolumes` - 代码路径: `worker/appm/conversion/version.go`, `worker/appm/volume/share-file.go`, `worker/appm/volume/vm_import.go` - 测试路径: `worker/appm/conversion/version_vm_import_test.go::TestCreateVolumesRejectsInvalidVMRegistryImport` ### 初始化安装光盘未删除时屏蔽热更新能力 - Capability ID: `rainbond.vm-live-update.capability-requires-installer-media-removal` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.GetVMLiveUpdateCapability` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestGetVMLiveUpdateCapabilityRejectsWhenInstallerMediaStillAttached` ### 无可用迁移目标节点时屏蔽热更新能力 - Capability ID: `rainbond.vm-live-update.capability-requires-migration-target` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.GetVMLiveUpdateCapability` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestGetVMLiveUpdateCapabilityRejectsWhenNoMigrationTargetNode` ### 拒绝运行中虚拟机同时热更新 CPU 和内存 - Capability ID: `rainbond.vm-live-update.cpu-memory-combined-rejected` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsCombinedCPUAndMemoryChange` ### 初始化安装光盘未删除时拒绝虚拟机热更新 - Capability ID: `rainbond.vm-live-update.installer-media-removal-required` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsWhenInstallerMediaStillAttached` ### 拒绝等于 maxGuest 的虚拟机内存热更新目标 - Capability ID: `rainbond.vm-live-update.memory-target-below-max-guest` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMMemoryAtMaxGuest` ### 无可用迁移目标节点时自动调整规格并重启虚拟机 - Capability ID: `rainbond.vm-live-update.migration-target-missing-auto-restart` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRestartsWhenNoMigrationTargetNode` ### Reject running VM CPU shrink during live update - Capability ID: `rainbond.vm-live-update.running-cpu-shrink-rejected` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMCPUShrink` ### 拒绝运行中虚拟机的内存热缩容 - Capability ID: `rainbond.vm-live-update.running-memory-shrink-rejected` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMLiveUpdateRejectsRunningVMMemoryShrink` ### 运行中虚拟机缩容允许进入垂直伸缩流程 - Capability ID: `rainbond.vm-live-update.running-shrink-restart-allowed-before-event` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `api/middleware.WrapEL` - 代码路径: `api/middleware/middleware.go` - 测试路径: `api/middleware/middleware_test.go::TestWrapELAllowsRunningVMShrinkToReachHandler` ### 不满足热更新条件时自动调整规格并重启虚拟机 - Capability ID: `rainbond.vm-live-update.unsupported-auto-restart` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.applyVMLiveUpdateIfPossible` - 代码路径: `api/handler/service_vm_live_update.go` - 测试路径: `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMNonMigratableFallsBackToSpecSyncAndRestart`, `api/handler/service_vm_live_update_test.go::TestServiceVerticalVMPatchMigrationErrorFallsBackToSpecSyncAndRestart` ### 虚拟机热更新后清理已完成的 virt-launcher Pod - Capability ID: `rainbond.vm-pods.cleanup-completed-virt-launcher` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.GetPods` - 代码路径: `api/handler/service_vm_pod_cleanup.go` - 测试路径: `api/handler/service_vm_pod_cleanup_test.go::TestGetPodsCleansUpCompletedVMLauncherPodsAfterHotUpdate` ### 在同步执行 KubeVirt 虚拟机电源操作后闭环事件状态 - Capability ID: `rainbond.vm-power.direct-ops-event-close` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/handler direct VM power operations` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_power_test.go::TestStartOrCreateVMMarksDirectStartEventSuccess`, `api/handler/service_vm_power_test.go::TestStartOrCreateVMMarksDirectStartEventFailure`, `api/handler/service_vm_power_test.go::TestRestartVMMarksDirectRestartEventSuccess`, `api/handler/service_vm_power_test.go::TestStopVMMarksDirectStopEventSuccess` ### 优先启动已存在且已停止的虚拟机,否则回退到 worker 创建流程 - Capability ID: `rainbond.vm-power.start-existing-or-create` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.StartOrCreateVM` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingStoppedVM`, `api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingStoppedVMWhenSpecSyncFindsMissingRootImport`, `api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsStoppedAlwaysRunStrategyVM`, `api/handler/service_vm_power_test.go::TestStartOrCreateVMStartsExistingVMWithUnknownPrintableStatus`, `api/handler/service_vm_power_test.go::TestStartOrCreateVMFallsBackToWorkerStartWhenVMIsMissing` ### Fallback to halt transient VM when direct stop fails - Capability ID: `rainbond.vm-power.stop-restoring-fallback` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.StopVM` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_power_test.go::TestStopVMFallsBackToHaltingProvisioningVMWhenDirectStopFails` ### VM probe attributes trigger VirtualMachine spec sync - Capability ID: `rainbond.vm-probe-attribute-syncs-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.isVMRuntimeSpecAttribute` - 代码路径: `api/handler/k8s_attribute.go` - 测试路径: `api/handler/k8s_attribute_vm_runtime_test.go::TestIsVMRuntimeSpecAttributeIncludesProbeAttributes` ### VM probe changes sync VirtualMachine spec - Capability ID: `rainbond.vm-probe-change-syncs-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.ServiceProbe` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_resource_sync_test.go::TestServiceProbeSyncsVirtualMachineSpecWhenVMProbeChanges` ### 将导出的虚拟机磁盘构建为 HTTP 制品镜像 - Capability ID: `rainbond.vm-publish.http-artifact-image-build` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.BuildFromVM` - 代码路径: `api/handler/share/service_share.go`, `builder/exector/build_from_vm.go`, `builder/sources/image.go`, `builder/sourceutil/remote_http_client.go` - 测试路径: `api/handler/share/service_share_test.go::TestServiceShareVMImageSourceSkipsDeliveredPathReferenceValidation`, `builder/exector/build_from_vm_test.go::TestRenderVMDockerfileUsesHTTPArtifactForGzipRawExport`, `builder/exector/build_from_vm_test.go::TestDownloadFileUsesVMExportTokenHeader`, `builder/exector/build_from_vm_test.go::TestDownloadFileOverwritesExistingPartialFile`, `builder/exector/build_from_vm_test.go::TestVMRemoteImageSourceDirUsesEventID`, `builder/exector/build_from_vm_test.go::TestMyDownloaderLogsUnknownSizeProgress`, `builder/exector/share_image_test.go::TestNewImageShareItemCapturesVMImageSource`, `builder/sources/image_test.go::TestBuildKitImageOutputUsesUncompressedLayersForVMBuild`, `builder/sourceutil/remote_http_client_test.go::TestNewRemotePackageHTTPClientSkipsTLSVerifyForVMExportService` ### Trace VM publish stage timing logs - Capability ID: `rainbond.vm-publish.stage-timing-logs` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `builder/exector.VMBuildItem.RunVMBuild` - 代码路径: `builder/exector/build_from_vm.go`, `builder/exector/share_image.go`, `builder/sources/image.go` - 测试路径: `builder/exector/build_from_vm_test.go::TestRecordVMBuildStageLogsSuccess`, `builder/exector/build_from_vm_test.go::TestRecordVMBuildStageLogsError`, `builder/sources/image_test.go::TestRecordImageBuildStageLogsFields`, `builder/sources/image_test.go::TestRecordImageBuildStageLogsError` ### 拆分 ISO 与磁盘镜像的 VM 运行时构建模板路径 - Capability ID: `rainbond.vm-run.build-media-paths` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/exector.renderVMDockerfile` - 代码路径: `builder/exector/build_from_vm.go` - 测试路径: `builder/exector/build_from_vm_test.go::TestResolveVMBuildMediaDistinguishesISOAndDiskImages` ### vm-run 本地包源在目录缺失时回退 storage 下载 - Capability ID: `rainbond.vm-run.local-package-storage-download` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `builder/sourceutil.ReadLocalPackageDir` - 代码路径: `builder/sourceutil/local_package.go` - 测试路径: `builder/sourceutil/local_package_test.go::TestReadLocalPackageDirFallsBackToStorageDownload` ### vm-run 远程包探测优先使用 HEAD - Capability ID: `rainbond.vm-run.remote-package-probe` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `builder/parser.VMServiceParse.Parse` - 代码路径: `builder/parser/vm_service.go` - 测试路径: `builder/parser/vm_service_test.go::TestVMServiceParseRemoteURLPrefersHeadProbe` ### vm-run 远程包探测在 HEAD 失败时回退 Range GET - Capability ID: `rainbond.vm-run.remote-package-probe-range-fallback` - 状态: `active` - 测试类型: `regression` - 接口类型: `other` - 业务入口: `builder/parser.VMServiceParse.Parse` - 代码路径: `builder/parser/vm_service.go` - 测试路径: `builder/parser/vm_service_test.go::TestVMServiceParseRemoteURLFallsBackToRangeGet` ### Retry VM spec sync when KubeVirt update conflicts - Capability ID: `rainbond.vm-runtime-spec-sync-conflict-retry` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `github.com/goodrain/rainbond/api/handler.(*ServiceAction).syncVirtualMachineSpec` - 代码路径: `api/handler/k8s_attribute.go` - 测试路径: `api/handler/k8s_attribute_vm_runtime_test.go::TestSyncVirtualMachineSpecRetriesOnConflict` ### 将 vm_disk_layout 视为触发 VM 规格同步的属性 - Capability ID: `rainbond.vm-runtime.disk-layout-attr-triggers-spec-sync` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.isVMRuntimeSpecAttribute` - 代码路径: `api/handler/k8s_attribute.go` - 测试路径: `api/handler/k8s_attribute_vm_runtime_test.go::TestIsVMRuntimeSpecAttributeIncludesDiskLayout` ### 暴露 registry 虚拟机 DataVolume 导入进度 - Capability ID: `rainbond.vm-template-import.registry-restore-progress` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `api/handler.vmRestoreDataVolumeNames` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_status_test.go::TestResolveVMDataVolumeRestoreIncludesRegistryImportDataVolumes` ### Expose VM template import restore progress - Capability ID: `rainbond.vm-template-import.restore-progress` - 状态: `active` - 测试类型: `unit` - 接口类型: `package_function` - 业务入口: `api/handler.resolveVMDataVolumeRestoreStatus` - 代码路径: `api/handler/service.go`, `api/model/model.go` - 测试路径: `api/handler/service_vm_status_test.go::TestResolveVMRestoreStatusIncludesDataVolumeProgress`, `api/handler/service_vm_status_test.go::TestResolveVMRestoreStatusMarksAllDataVolumesSucceeded`, `api/handler/service_vm_status_test.go::TestResolveVMDataVolumeRestoreIgnoresInitialBlankDataVolumes` ### VM restore status is limited to artifact imports - Capability ID: `rainbond.vm-template-import.status-restoring` - 状态: `active` - 测试类型: `unit` - 接口类型: `package_function` - 业务入口: `api/handler.resolveVMServiceRuntimeStatus` - 代码路径: `api/handler/service.go` - 测试路径: `api/handler/service_vm_status_test.go::TestResolveVMTransitionStatusReturnsStartingForDataVolumeImportWithoutRestoreContext`, `api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsRestoringWhenArtifactDataVolumeImportsBeforeVMIExists`, `api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsStartingForInitialBlankDataVolume`, `api/handler/service_vm_status_test.go::TestResolveVMServiceRuntimeStatusReturnsStartingForInitialHTTPDataVolume`, `api/handler/service_vm_status_test.go::TestResolveVMTransitionStatusReturnsAbnormalForDataVolumeError` ### 为 VM 数据卷保留所选存储类 - Capability ID: `rainbond.vm-volume-selected-storage-class` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ShareFileVolume.CreateVolume` - 代码路径: `worker/appm/volume/share-file.go`, `worker/appm/volume/volume.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestNewVolumeManagerUsesSelectedStorageClassForVMDisks` ### 旧版 vm-file 虚机卷继续回退到 local-path - Capability ID: `rainbond.vm-volume-vm-file-backward-compatible` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/volume.ShareFileVolume.CreateVolume` - 代码路径: `worker/appm/volume/share-file.go`, `worker/appm/volume/volume.go` - 测试路径: `worker/appm/volume/share_file_vm_test.go::TestShareFileVolumeVMStorageClassFallsBackToLocalPathForLegacyVMFile` ### 允许 VM 服务在不同数据卷间复用设备路径 - Capability ID: `rainbond.vm-volume.allow-shared-device-paths` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.TenantServiceVolumeDaoImpl.AddModel` - 代码路径: `db/mysql/dao/tenants.go` - 测试路径: `db/mysql/dao/tenant_service_volume_vm_test.go::TestTenantServiceVolumeDaoAddModelAllowsDuplicateVMDevicePath` ### 仅删除指定提供方的挂载关系 - Capability ID: `rainbond.volume-dependency.precise-delete` - 状态: `active` - 测试类型: `regression` - 接口类型: `handler_method` - 业务入口: `api/handler.ServiceAction.VolumeDependency` - 代码路径: `api/handler/service.go`, `db/dao/dao.go`, `db/mysql/dao/tenants.go` - 测试路径: `api/handler/service_volume_dependency_test.go::TestVolumeDependencyDeleteUsesConsumerProviderAndVolumeName`, `db/mysql/dao/tenant_service_mount_relation_test.go::TestTenantServiceMountRelationDaoDeletesOnlyRequestedProviderVolume` ### 保持非 VM 服务卷路径唯一性校验 - Capability ID: `rainbond.volume.keep-non-vm-path-uniqueness` - 状态: `active` - 测试类型: `regression` - 接口类型: `dao_method` - 业务入口: `db/mysql/dao.TenantServiceVolumeDaoImpl.AddModel` - 代码路径: `db/mysql/dao/tenants.go` - 测试路径: `db/mysql/dao/tenant_service_volume_vm_test.go::TestTenantServiceVolumeDaoAddModelRejectsDuplicatePathForNonVMService` ### 将 watch 后端错误分发到内部错误通道 - Capability ID: `rainbond.watch.error-dispatch` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.watchChan.sendError` - 代码路径: `util/watch/watcher.go` - 测试路径: `util/watch/watch_test.go::TestWatchChanSendError` ### 将 watch 后端错误转换为 API 错误事件 - Capability ID: `rainbond.watch.error-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.parseError` - 代码路径: `util/watch/watcher.go` - 测试路径: `util/watch/watch_test.go::TestParseError` ### 将 etcd watch 事件解析为内部事件结构 - Capability ID: `rainbond.watch.etcd-event-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.parseEvent` - 代码路径: `util/watch/event.go` - 测试路径: `util/watch/watch_test.go::TestParseEvent` ### 为 watch 事件暴露键与载荷访问器 - Capability ID: `rainbond.watch.event-accessors` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.Event.GetKey` - 代码路径: `util/watch/watch.go` - 测试路径: `util/watch/watch_test.go::TestEventAccessors` ### 为 watch 事件暴露原始字节载荷访问器 - Capability ID: `rainbond.watch.event-byte-accessors` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.Event.GetValue` - 代码路径: `util/watch/watch.go` - 测试路径: `util/watch/watch_test.go::TestEventByteAccessors` ### 将底层 watch 事件分发到输入事件通道 - Capability ID: `rainbond.watch.event-dispatch` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.watchChan.sendEvent` - 代码路径: `util/watch/watcher.go` - 测试路径: `util/watch/watch_test.go::TestWatchChanSendEvent` ### 将底层 watch 事件转换为 Added/Modified/Deleted 结果 - Capability ID: `rainbond.watch.event-type-transform` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.watchChan.transform` - 代码路径: `util/watch/watcher.go` - 测试路径: `util/watch/watch_test.go::TestWatchChanTransform` ### 将 watch 资源版本解析为 etcd 修订号 - Capability ID: `rainbond.watch.resource-version-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.ParseWatchResourceVersion` - 代码路径: `util/watch/util.go` - 测试路径: `util/watch/watch_test.go::TestParseWatchResourceVersion` ### 将 watch 状态错误格式化为稳定字符串 - Capability ID: `rainbond.watch.status-error-format` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.Status.Error` - 代码路径: `util/watch/event.go` - 测试路径: `util/watch/watch_test.go::TestStatusError` ### 将初始 etcd 键值转换为合成创建事件 - Capability ID: `rainbond.watch.synthetic-create-event` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `util/watch.parseKV` - 代码路径: `util/watch/event.go` - 测试路径: `util/watch/watch_test.go::TestParseKVMarksCreateEvent` ### 生成稳定的 WebSocket 鉴权 MD5 摘要 - Capability ID: `rainbond.webcli.auth-signature` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.md5Func` - 代码路径: `api/webcli/app/app.go` - 测试路径: `api/webcli/app/app_test.go::TestMD5Func` ### 拒绝对已完成 Pod 建立 exec 会话 - Capability ID: `rainbond.webcli.completed-pod-guard` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.App.GetContainerArgs` - 代码路径: `api/webcli/app/app.go` - 测试路径: `api/webcli/app/app_test.go::TestGetContainerArgsRejectsCompletedPod` ### 为 WebCLI 请求补齐 Kubernetes REST 客户端默认配置 - Capability ID: `rainbond.webcli.config-defaults` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.SetConfigDefaults` - 代码路径: `api/webcli/app/app.go` - 测试路径: `api/webcli/app/app_test.go::TestSetConfigDefaults` ### 为 WebCLI 会话解析执行容器Pod IP与命令参数 - Capability ID: `rainbond.webcli.container-args` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.App.GetContainerArgs` - 代码路径: `api/webcli/app/app.go` - 测试路径: `api/webcli/app/app_test.go::TestGetContainerArgsSelectsContainerAndExecArgs` ### 限制 WebCLI 终端输出最大宽度 - Capability ID: `rainbond.webcli.max-width` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/term.NewMaxWidthWriter` - 代码路径: `api/webcli/term/term_writer.go` - 测试路径: `api/webcli/term/term_writer_test.go::TestMaxWidthWriter` ### 请求的容器不存在时拒绝建立 exec 会话 - Capability ID: `rainbond.webcli.missing-container-guard` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.App.GetContainerArgs` - 代码路径: `api/webcli/app/app.go` - 测试路径: `api/webcli/app/app_test.go::TestGetContainerArgsRejectsMissingContainer` ### 为 WebCLI 执行会话排队并应用终端尺寸变更 - Capability ID: `rainbond.webcli.terminal-resize` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/app.execContext.ResizeTerminal` - 代码路径: `api/webcli/app/exec.go` - 测试路径: `api/webcli/app/tty_test.go::TestResizeTerminalQueuesWindowSize` ### 按单词折行 WebCLI 终端输出 - Capability ID: `rainbond.webcli.word-wrap` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `api/webcli/term.NewWordWrapWriter` - 代码路径: `api/webcli/term/term_writer.go` - 测试路径: `api/webcli/term/term_writer_test.go::TestWordWrapWriter` ### 单应用状态避免无用组件查询且保留资源及Helm行为 - Capability ID: `rainbond.worker.app-status-no-unused-component-query` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/server.RuntimeServer.GetAppStatus` - 代码路径: `worker/server/server.go` - 测试路径: `worker/server/app_status_query_test.go::TestGetAppStatusSkipsUnusedComponentRead`, `worker/server/app_status_query_test.go::TestGetAppStatusPreservesHelmStatusAndErrors` ### 根据自动伸缩规则构建 HPA 指标与对象 - Capability ID: `rainbond.worker.appm.autoscaler.build-hpa-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.newHPA` - 代码路径: `worker/appm/conversion/autoscaler.go` - 测试路径: `worker/appm/conversion/autoscaler_test.go::TestNewHPA` ### 配置 appm 的 etcd 发现器并在无客户端时保护抓取逻辑 - Capability ID: `rainbond.worker.appm.discovery.etcd-config` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/thirdparty/discovery.NewEtcd` - 代码路径: `worker/appm/thirdparty/discovery/etcd.go` - 测试路径: `worker/appm/thirdparty/discovery/etcd_test.go::TestNewEtcdAndFetchGuard` ### 对不支持的 appm 发现后端返回错误 - Capability ID: `rainbond.worker.appm.discovery.unsupported-type` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/thirdparty/discovery.NewDiscoverier` - 代码路径: `worker/appm/thirdparty/discovery/discovery.go` - 测试路径: `worker/appm/thirdparty/discovery/discovery_unit_test.go::TestNewDiscoverierUnsupportedType` ### Reassign worker TCP NodePorts already allocated in Kubernetes - Capability ID: `rainbond.worker.appm.gateway.reassign-conflicting-nodeport` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/conversion.reassignAllocatedNodePort` - 代码路径: `worker/appm/conversion/gateway.go` - 测试路径: `worker/appm/conversion/gateway_test.go::TestReassignAllocatedNodePort`, `worker/appm/conversion/gateway_test.go::TestReassignAllocatedNodePortKeepsCurrentServicePort` ### Use Local externalTrafficPolicy for VM worker NodePort services - Capability ID: `rainbond.worker.appm.gateway.vm-nodeport-service-uses-local-external-traffic-policy` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/conversion.outerServiceExternalTrafficPolicy` - 代码路径: `worker/appm/conversion/gateway.go` - 测试路径: `worker/appm/conversion/gateway_test.go::TestOuterServiceExternalTrafficPolicyForVM`, `worker/appm/conversion/gateway_test.go::TestOuterServiceExternalTrafficPolicyForNonVM` ### 根据新旧工作负载规格计算允许的 StatefulSet Patch 内容 - Capability ID: `rainbond.worker.appm.patch.statefulset-modified-configuration` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/types/v1.getStatefulsetModifiedConfiguration` - 代码路径: `worker/appm/types/v1/patch.go` - 测试路径: `worker/appm/types/v1/patch_test.go::TestGetStatefulsetModifiedConfiguration` ### 将组件运行状态汇总为应用状态 - Capability ID: `rainbond.worker.appm.store.aggregate-app-status` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/store.getAppStatus` - 代码路径: `worker/appm/store/store.go` - 测试路径: `worker/appm/store/store_test.go::TestGetAppStatus` ### 跳过 Rainbond 管理的 TCP 路由匿名端口预留 - Capability ID: `rainbond.worker.appm.store.skip-managed-tcp-nodeport-reservation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/store.shouldTrackNodePortService` - 代码路径: `worker/appm/store/store.go` - 测试路径: `worker/appm/store/store_test.go::TestShouldTrackNodePortService` ### New StatefulSet claims converge to stored capacity without recreating workloads - Capability ID: `rainbond.worker.appm.store.stateful-volume-capacity-reconciliation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `appRuntimeStore.OnAdd` - 代码路径: `worker/appm/store/store.go`, `worker/appm/store/volume_expansion.go` - 测试路径: `worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionOnClaimEvents`, `worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionRetriesAfterDatabaseCommit`, `worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionRetriesFailuresAndConflicts`, `worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionSkipsUnsupportedOrForeignClaims`, `worker/appm/store/volume_expansion_test.go::TestStatefulVolumeExpansionAcceptsManualVolumeLabel` ### 在命名空间事件中同步受管命名空间的镜像拉取密钥 - Capability ID: `rainbond.worker.appm.store.sync-managed-namespace-image-pull-secret` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/store.appRuntimeStore.nsEventHandler` - 代码路径: `worker/appm/store/store.go` - 测试路径: `worker/appm/store/store_test.go::TestNsEventHandlerProvidesAddFunc` ### 拆分 ISO 与 QCOW2 的 VM 启动介质组装路径 - Capability ID: `rainbond.worker.appm.vm-boot-media-paths` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.TenantServiceVersion` - 代码路径: `worker/appm/conversion/version.go`, `worker/appm/conversion/vm_runtime.go` - 测试路径: `worker/appm/conversion/version_vm_test.go::TestResolveVMBootPathUsesISOInstallerWhenRootDiskIsBlank`, `worker/appm/conversion/version_vm_test.go::TestApplyVMBootVolumeLayoutDropsInstallerVolumeWhenDiskLayoutRemovesIt` ### VM container disk CD-ROM media - Capability ID: `rainbond.worker.appm.vm-container-disk-cdrom` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/conversion.appendVMContainerDiskCDROMs` - 代码路径: `worker/appm/conversion/vm_runtime.go`, `worker/appm/conversion/version.go` - 测试路径: `worker/appm/conversion/vm_runtime_test.go::TestBuildVMDiskLayoutKeepsContainerDiskImage`, `worker/appm/conversion/vm_runtime_test.go::TestAppendVMContainerDiskCDROMsCreatesContainerDiskVolumeAndDisk` ### 所有虚拟机统一使用 VirtIO 网络接口 - Capability ID: `rainbond.worker.appm.vm-default-interface-virtio` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.resolveVMInterfaceModel` - 代码路径: `worker/appm/conversion/vm_runtime.go` - 测试路径: `worker/appm/conversion/vm_runtime_test.go::TestBuildVMRuntimeConfigRandomNetwork`, `worker/appm/conversion/vm_runtime_test.go::TestBuildVMRuntimeConfigRandomWindowsNetworkUsesVirtio` ### 默认虚拟机内存热插拔上限预留 - Capability ID: `rainbond.worker.appm.vm-memory-hotplug-headroom` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/appm/conversion.buildStandardVMMemory` - 代码路径: `worker/appm/conversion/version.go` - 测试路径: `worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemorySetsGuestAndMaxGuest`, `worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemoryAlignsGuestMemoryToTwoMi`, `worker/appm/conversion/version_vm_test.go::TestBuildStandardVMMemoryUsesFourTimesGuestAboveFloor` ### Worker 消息队列健康检查超时与并发保护 - Capability ID: `rainbond.worker.bounded-mq-health-check` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker/discover.HealthCheckContext` - 代码路径: `worker/discover/health.go`, `worker/discover/manager.go`, `worker/monitor/exporter.go` - 测试路径: `worker/discover/health_test.go::TestHealthCheckReturnsPromptlyWhenMQIsHealthy`, `worker/discover/health_test.go::TestHealthCheckUsesOneDeadlineForEnqueueAndDequeue`, `worker/discover/health_test.go::TestHealthCheckBoundsBackgroundCaller`, `worker/discover/health_test.go::TestHealthCheckStopsOnCallerCancellation`, `worker/discover/health_test.go::TestHealthCheckCoalescesConcurrentProbes`, `worker/discover/health_test.go::TestHealthCheckCanceledWaiterDoesNotStartAnotherRoundTrip`, `worker/discover/health_test.go::TestHealthCheckRejectsFailedOrEmptyRoundTrips`, `worker/discover/health_test.go::TestHealthCheckRecoversAfterTransientMQFailure`, `worker/discover/health_test.go::TestHealthCheckCanceledRoundTripDoesNotCacheFailure`, `worker/discover/health_test.go::TestHealthCheckContextReportsMissingMQ` ### Isolate rendered application configuration by component - Capability ID: `rainbond.worker.config-group-component-isolation` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.createEnv` - 代码路径: `worker/appm/conversion/version.go` - 测试路径: `worker/appm/conversion/configgroup_test.go::TestConfigGroupComponentIsolation` ### Parse component cmd and args attributes as YAML arrays - Capability ID: `rainbond.worker.conversion.cmd-args-yaml` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/appm/conversion.getMainContainer` - 代码路径: `api/handler/k8s_attribute.go`, `worker/appm/conversion/version.go` - 测试路径: `api/handler/k8s_attribute_test.go::TestUpdateK8sAttributeUpdatesSaveType`, `worker/appm/conversion/version_cmd_args_test.go::TestParseStringSequenceAttribute` ### 根据组件类型创建 DaemonSet 工作负载 - Capability ID: `rainbond.worker.conversion.daemonset-workload` - 状态: `active` - 测试类型: `regression` - 接口类型: `service_method` - 业务入口: `worker.appm.conversion.TenantServiceBase` - 代码路径: `worker/appm/conversion/service.go` - 测试路径: `worker/appm/conversion/service_daemonset_test.go::TestInitBaseDaemonSetCreatesDaemonSetWorkload` ### 组件 Pod 安全上下文属性 - Capability ID: `rainbond.worker.conversion.pod-security-context` - 状态: `active` - 测试类型: `regression` - 接口类型: `package_function` - 业务入口: `worker.appm.conversion.createPodSecurityContext` - 代码路径: `worker/appm/conversion/version.go` - 测试路径: `worker/appm/conversion/version_security_context_test.go::TestCreatePodSecurityContextUsesK8sAttribute` ### 根据仓库名与模板名拼装 Helm chart 引用 - Capability ID: `rainbond.worker.helmapp.chart-ref` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.App.Chart` - 代码路径: `worker/master/controller/helmapp/app.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestAppChart` ### 管理 HelmApp 条件的新增更新与成功态切换 - Capability ID: `rainbond.worker.helmapp.condition-lifecycle` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateConditionStatus` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_status.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusConditionLifecycle` ### 按类型查询 HelmApp 条件及其真值状态 - Capability ID: `rainbond.worker.helmapp.condition-query` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppStatus.GetCondition` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_status.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusConditionQuery` ### 在条件未变化时跳过冗余的 HelmApp 条件写入 - Capability ID: `rainbond.worker.helmapp.condition-set-noop` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppStatus.SetCondition` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_status.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusSetConditionDoesNotDuplicateUnchangedCondition` ### 更新条件状态时自动创建缺失的 HelmApp 条件 - Capability ID: `rainbond.worker.helmapp.condition-status-default-create` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateConditionStatus` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_status.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusUpdateConditionStatusCreatesMissingCondition` ### 在状态未变化时保留条件的转移时间 - Capability ID: `rainbond.worker.helmapp.condition-transition-time` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppStatus.UpdateCondition` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_status.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppStatusUpdateConditionPreservesTransitionTimeOnSameStatus` ### 判断 HelmApp 是否仍需执行检测 - Capability ID: `rainbond.worker.helmapp.detect-required` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.App.NeedDetect` - 代码路径: `worker/master/controller/helmapp/app.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestAppNeedDetect` ### 判断 HelmApp 检测前置条件是否已经满足 - Capability ID: `rainbond.worker.helmapp.detected-prerequisites` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.Status.isDetected` - 代码路径: `worker/master/controller/helmapp/status.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestStatusGetPhase` ### 启动 HelmApp envtest 集成测试套件 - Capability ID: `rainbond.worker.helmapp.envtest-suite` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.BeforeSuite` - 代码路径: `worker/master/controller/helmapp/suite_test.go` - 测试路径: `worker/master/controller/helmapp/suite_test.go` ### 通过关闭队列停止 HelmApp finalizer - Capability ID: `rainbond.worker.helmapp.finalizer-stop` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.Finalizer.Stop` - 代码路径: `worker/master/controller/helmapp/finilizer.go` - 测试路径: `worker/master/controller/helmapp/store_unit_test.go::TestFinalizerStop` ### 通过控制循环安装并部署 Helm 应用 - Capability ID: `rainbond.worker.helmapp.install-and-deploy` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.ControlLoop` - 代码路径: `worker/master/controller/helmapp/controlloop.go` - 测试路径: `worker/master/controller/helmapp/controlloop_test.go` ### 按无序方式比较 HelmApp 期望与已生效的 overrides - Capability ID: `rainbond.worker.helmapp.overrides-compare` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmApp.OverridesEqual` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_types.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppOverridesEqual` ### 根据条件与前置状态推导 HelmApp 阶段 - Capability ID: `rainbond.worker.helmapp.phase-derive` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.Status.getPhase` - 代码路径: `worker/master/controller/helmapp/status.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestStatusGetPhase` ### Preserve current HelmApp image intent during setup - Capability ID: `rainbond.worker.helmapp.preserve-current-spec` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `helmapp.App.UpdateSpec` - 代码路径: `worker/master/controller/helmapp/app.go` - 测试路径: `worker/master/controller/helmapp/spec_defaults_test.go::TestHelmAppSpecDefaultsPreserveCurrentReferences` ### 将 HelmApp 队列键拆分为名称与命名空间片段 - Capability ID: `rainbond.worker.helmapp.queue-key-parse` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.nameNamespace` - 代码路径: `worker/master/controller/helmapp/controlloop.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestNameNamespace` ### 协调 Helm 应用进入配置阶段 - Capability ID: `rainbond.worker.helmapp.reconcile-configuring-phase` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.ControlLoop` - 代码路径: `worker/master/controller/helmapp/controlloop.go` - 测试路径: `worker/master/controller/helmapp/controlloop_test.go` ### 协调 Helm 应用默认值 - Capability ID: `rainbond.worker.helmapp.reconcile-default-values` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.ControlLoop` - 代码路径: `worker/master/controller/helmapp/controlloop.go` - 测试路径: `worker/master/controller/helmapp/controlloop_test.go` ### 协调 Helm 应用进入检测阶段 - Capability ID: `rainbond.worker.helmapp.reconcile-start-detecting` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.ControlLoop` - 代码路径: `worker/master/controller/helmapp/controlloop.go` - 测试路径: `worker/master/controller/helmapp/controlloop_test.go` ### 判断 HelmApp 是否仍需初始化默认配置 - Capability ID: `rainbond.worker.helmapp.setup-required` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.App.NeedSetup` - 代码路径: `worker/master/controller/helmapp/app.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestAppNeedSetup` ### 从控制器 store lister 获取 HelmApp 对象 - Capability ID: `rainbond.worker.helmapp.store-fetch` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.store.GetHelmApp` - 代码路径: `worker/master/controller/helmapp/store.go` - 测试路径: `worker/master/controller/helmapp/store_unit_test.go::TestStoreGetHelmApp` ### 根据 EID 与商店名构建完整应用商店名称 - Capability ID: `rainbond.worker.helmapp.store-full-name` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `pkg/apis/rainbond/v1alpha1.HelmAppSpec.FullName` - 代码路径: `pkg/apis/rainbond/v1alpha1/helmapp_types.go` - 测试路径: `pkg/apis/rainbond/v1alpha1/helmapp_unit_test.go::TestHelmAppSpecFullName` ### 判断已配置 HelmApp 是否需要安装或更新 - Capability ID: `rainbond.worker.helmapp.update-required` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/helmapp.App.NeedUpdate` - 代码路径: `worker/master/controller/helmapp/app.go` - 测试路径: `worker/master/controller/helmapp/unit_test.go::TestAppNeedUpdate` ### DaemonSet 升级补丁生成 - Capability ID: `rainbond.worker.patch.daemonset-upgrade` - 状态: `active` - 测试类型: `regression` - 接口类型: `service_method` - 业务入口: `worker.appm.types.v1.AppService.SetUpgradePatch` - 代码路径: `worker/appm/types/v1/patch.go` - 测试路径: `worker/appm/types/v1/patch_test.go::TestSetUpgradePatchCreatesDaemonSetPatch` ### 根据条件容器状态与事件归类 Pod 状态 - Capability ID: `rainbond.worker.pod-status.describe` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/util.DescribePodStatus` - 代码路径: `worker/util/pod.go` - 测试路径: `worker/util/pod_test.go::TestDescribePodStatus` ### DaemonSet 运行状态计算 - Capability ID: `rainbond.worker.status.daemonset` - 状态: `active` - 测试类型: `regression` - 接口类型: `service_method` - 业务入口: `worker.appm.types.v1.AppService.GetServiceStatus` - 代码路径: `worker/appm/types/v1/status.go` - 测试路径: `worker/appm/types/v1/status_test.go::TestGetServiceStatusReturnsRunningForReadyDaemonSet`, `worker/appm/types/v1/status_test.go::TestGetServiceStatusReturnsAbnormalForUnschedulableDaemonSetPod` ### 执行第三方组件端点探测并映射结果 - Capability ID: `rainbond.worker.thirdcomponent.prober.execute-endpoint-probe` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/thirdcomponent/prober.prober.probe` - 代码路径: `worker/master/controller/thirdcomponent/prober/prober.go` - 测试路径: `worker/master/controller/thirdcomponent/prober/prober_test.go::TestProbe` ### 缓存并清理第三方组件探测结果 - Capability ID: `rainbond.worker.thirdcomponent.prober.manage-results-cache` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/controller/thirdcomponent/prober/results.NewManager` - 代码路径: `worker/master/controller/thirdcomponent/prober/results/results_manager.go` - 测试路径: `worker/master/controller/thirdcomponent/prober/results/results_manager_test.go::TestCacheOperations` ### 根据 PVC 名称解析 Pod 名与卷 ID - Capability ID: `rainbond.worker.volume-provider.pvc-identifiers` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/master/volumes/provider.getVolumeIDByPVCName` - 代码路径: `worker/master/volumes/provider/rainbondsssc.go` - 测试路径: `worker/master/volumes/provider/rainbondsslc_test.go::TestGetVolumeIDByPVCName` ### 按可用内存选择存储节点 - Capability ID: `rainbond.worker.volume-provider.select-node` - 状态: `active` - 测试类型: `integration` - 接口类型: `workflow` - 业务入口: `worker/master/volumes/provider.rainbondsslcProvisioner.selectNode` - 代码路径: `worker/master/volumes/provider/rainbondsslc.go` - 测试路径: `worker/master/volumes/provider/rainbondsslc_test.go::TestSelectNode` ### 将存储类转换为 Rainbond 卷类型 - Capability ID: `rainbond.worker.volume-type.from-storageclass` - 状态: `active` - 测试类型: `regression` - 接口类型: `workflow` - 业务入口: `worker/util.TransStorageClass2RBDVolumeType` - 代码路径: `worker/util/volumetype.go`, `db/mysql/dao/volume_type.go` - 测试路径: `worker/util/volumetype_test.go::TestTransStorageClass2RBDVolumeType`, `db/mysql/dao/volume_type_test.go::TestShouldBackfillStorageClassAccessMode`