Modularization Proposal: Verify Bridge Path
Based on the recent complexity audit (Complexity: Very High / 87 points), the verify-bridge-path.ps1 script has grown into a "God Script" that handles everything from API communication to detailed filesystem heuristics.
Modularizing this script will reduce the line count from ~600 to under 100 in the main loop, drastically improving readability and allowing shared logic (like API helpers) to be used across the entire toolset.
🏗️ Proposed Directory Structure
Original monolith file as its already backed up (tools/backups/evals/verify-bridge-path-20260407-1028.ps1) using tools/eval-ps.ps1 which also generated eval reports at tools/telemetry/verify-bridge-path-20260407-1028.json and /tools/telemetry/verify-bridge-path-20260407-1028.md which helped create the diagnostics, variables, and functions used in the monolith file.
We generated a modularization sandbox for the target script as verify-bridge-path/ directly inside tools/modularization using tools/modularization/scaffold-modularization-files.ps1.
Allow verify-bridge-path_modularized.ps1 to become the new main orchestrator. It serves as the primary entry point, dot-sourcing the specialized functions from the lib/ directory. Once the contents are moved to the root tools/ folder and the file is renamed, it replaces the monolith.
Note on Orchestration: The
verify-bridge-path_modularized.ps1file manages environment initialization and coordinates the audit suite, but delegates all categorical logic (API, Discovery, Audits, Reporting) to the libraries in its associatedlibfolder.
No changes are needed to the original monolith file. Only use it for reference if needed.
tools/
├── verify-bridge-path.ps1 (Main Orchestrator [to be replaced, no changes needed])
├── modularization/
│ └── verify-bridge-path/
│ ├── verify-bridge-path_modularized.ps1 (Main Orchestrator Modularized)
│ └── lib/
│ ├── bridge-api.ps1 (Shared API Wrappers)
│ ├── bridge-discovery.ps1 (Account & Partition Logic)
│ ├── bridge-audits.ps1 (Health, Security, & Baseline Checks)
│ └── bridge-reporting.ps1 (Telemetry & JSON Output)
🧩 Categorical Module Breakdown
1. lib/bridge-api.ps1 (Shared Client)
Responsibility: Communication and Error Handling.
- Move
Invoke-Cpanel-API2andInvoke-UAPI. - Add
Test-CpanelApiResult(currently found intest-symlink.ps1) to provide unified error parsing for all tools.
2. lib/bridge-discovery.ps1 (Pathfinding)
Responsibility: Identifying the target location.
- Logic for
listaccts(Home/Partition resolution). - The
PathsToExploreloop that detects Atomic vs. Legacy structures. - Returns a standardized "Bridge Context" object.
3. lib/bridge-audits.ps1 (Check Suite)
Responsibility: Domain-specific validation logic.
- Structural Audit: Mapping
releases,current, andbackups. - Asset Matrix: Comparing file existence across scopes.
- Security Audit:
.htaccessparsing and permission checks. - Maintenance Audits: Cleanup (artifacts), Legacy Presence, and Baseline Health.
4. lib/bridge-reporting.ps1 (Data Output)
Responsibility: Console feedback and persistence.
- Logic for the Cyan/Green console output headers.
- Construction of the
StringBuilderfor the Markdown report. - Final assembly of the
bridge_path.jsontelemetry object.
🔄 Refactored Main Orchestrator (Example)
By moving the "How" into modules, the main verify-bridge-path.ps1 focus shifts to "What":
# 1. Load Modules
. "$PSScriptRoot\tools\lib\bridge-api.ps1"
. "$PSScriptRoot\tools\lib\bridge-discovery.ps1"
. "$PSScriptRoot\tools\lib\bridge-audits.ps1"
. "$PSScriptRoot\tools\lib\bridge-reporting.ps1"
# 2. Environment Initialization
$Context = Get-BridgeAccountContext -TargetUser "ab6506"
$Discovery = Resolve-BridgeRoot -Context $Context
# 3. Audit Suite
$Map = Get-BridgeStructuralMap -Context $Context -Discovery $Discovery
$Security = Invoke-BridgeSecurityAudit -Context $Context -Discovery $Discovery
$Readiness = Get-MigrationReadiness -Map $Map -SecurityAudit $Security
# 4. Persistence
Save-BridgeReports -JsonData $JsonData -MarkdownText $ReportText
📈 Complexity Comparison & Refactoring Audit
| Component | Lines | Complexity Points | Rating |
|---|---|---|---|
| Original Monolith | 585 | 87 | Very High |
| verify-bridge-path_modularized.ps1 | 91 | 4 | Low |
lib/bridge-audits.ps1 |
280 | 31 | Moderate High |
lib/bridge-reporting.ps1 |
130 | 26 | Moderate High |
lib/bridge-discovery.ps1 |
64 | 8 | Low |
lib/bridge-api.ps1 |
52 | 7 | Low |
Audit Summary: The migration successfully decentralized logic. The "Peak Cognitive Load" (the difficulty of reading the most complex file) dropped from 87 to 31, a 64% improvement in maintainability.
🚀 Future Growth & Potentials
- Orchestrator Lean-ness: The orchestrator is now a "Thin Controller". Any new high-level deployment phases can be added as single-line function calls without bloating the main script.
- Categorical Reporting:
bridge-reporting.ps1(26 points) currently uses a single largeStringBuilderloop. As more audits are added, we should move to a section-based builder (e.g.,Build-SecuritySection,Build-StorageSection) to keep complexity low. - Asset Matrix Extraction:
bridge-audits.ps1(31 points) is currently the "heaviest" logic file. If heuristics for "Atomic vs Legacy" grow, theGet-BridgeAssetMatrixlogic could be moved into its own specialized library. - API Generalization:
bridge-api.ps1provides a solid foundation to become a shared WHM/cPanel SDK for other deployment tools in thewp-posterecosystem.
STATUS OF MODULARIZATION
Complete