# bootstrap-init Specification ## Purpose TBD - created by archiving change deployment-self-init. Update Purpose after archive. ## Requirements ### Requirement: 集中化目录初始化 系统 SHALL 在应用启动时通过 `bootstrap.EnsureDirectories()` 函数统一创建所有必需的运行时目录。 目录列表: - 临时文件目录(从 `config.Storage.TempDir` 读取) - 应用日志目录(从 `config.Logging.AppLog.Filename` 提取目录部分) - 访问日志目录(从 `config.Logging.AccessLog.Filename` 提取目录部分) #### Scenario: 成功创建所有目录 - **WHEN** 应用启动且所有目录路径可写 - **THEN** 系统创建所有必需目录,权限为 0755 - **AND** 函数返回 nil #### Scenario: 目录已存在 - **WHEN** 应用启动且目录已存在 - **THEN** 系统跳过创建,不报错 - **AND** 函数返回 nil #### Scenario: 配置路径为空 - **WHEN** 某个目录配置为空字符串 - **THEN** 系统跳过该目录的创建 - **AND** 不影响其他目录的创建 ### Requirement: 权限降级策略 系统 SHALL 在目录创建权限不足时自动降级到系统临时目录。 #### Scenario: 权限不足时降级 - **WHEN** 创建目录因权限不足失败(os.IsPermission 为 true) - **THEN** 系统使用 `os.TempDir()/junhong/<原目录名>` 作为降级路径 - **AND** 记录 WARN 级别日志,包含原路径和降级路径 - **AND** 函数返回降级后的路径 #### Scenario: 非权限错误 - **WHEN** 创建目录失败且不是权限问题 - **THEN** 系统返回错误,应用启动失败 - **AND** 错误信息包含目录路径和原始错误 ### Requirement: 初始化顺序 系统 SHALL 确保目录初始化在所有组件初始化之前完成。 #### Scenario: 正确的初始化顺序 - **WHEN** 应用启动 - **THEN** 执行顺序为: 1. config.Load() 加载配置 2. bootstrap.EnsureDirectories() 创建目录 3. logger.Init() 初始化日志 4. 其他组件初始化 #### Scenario: 目录初始化失败 - **WHEN** `bootstrap.EnsureDirectories()` 返回错误 - **THEN** 应用立即退出,不继续初始化其他组件 - **AND** 错误信息输出到 stderr ### Requirement: 移除分散的目录创建逻辑 系统 SHALL 移除各组件中分散的目录创建代码。 #### Scenario: S3Provider 不再创建目录 - **WHEN** 初始化 S3Provider - **THEN** 不再调用 `os.MkdirAll` 创建临时目录 - **AND** 假设目录已由 bootstrap 创建