# 测试能力清单
> 此文件由 `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`