Skip to content

Dependency Graph

This page documents which repositories depend on which, determining the build order for the ecosystem.

Library Dependencies

LibraryUtils                          (no Amadla dependencies)
├── LibraryFramework                  (depends on: LibraryUtils)
├── LibraryPluginFramework            (depends on: LibraryUtils)
├── LibraryClerkFramework             (depends on: LibraryUtils)
└── LibraryAuditFramework             (depends on: LibraryUtils, LibraryFramework)

Tool Dependencies

hery                                  (depends on: LibraryUtils, LibraryFramework)
doorman                               (depends on: LibraryUtils, LibraryFramework)
weaver                                (depends on: LibraryUtils)
auditor-application                   (depends on: LibraryUtils, LibraryAuditFramework)
clerk-keepassxc                       (depends on: dbus — minimal Amadla deps)
hery-playground                       (independent — uses Gin, no Amadla libs)

Full Dependency Matrix

Repo LibraryUtils LibraryFramework LibraryPluginFW LibraryClerkFW LibraryAuditFW
LibraryFramework x
LibraryPluginFramework x
LibraryClerkFramework x
LibraryAuditFramework x x
hery x x
doorman x x
weaver x
auditor-application x x
clerk-keepassxc

Build Order

The ecosystem must be built in this order (each level can be built in parallel):

Level 0: LibraryUtils
Level 1: LibraryFramework, LibraryPluginFramework, LibraryClerkFramework
Level 2: LibraryAuditFramework, hery, doorman, weaver
Level 3: auditor-application, clerk-keepassxc
Level 4: (future tools: raise, lay, judge, waiter, unravel)

go.mod Replace Directives

All inter-project dependencies use replace directives pointing to sibling directories:

Project Replace Directives
hery LibraryUtils => ../LibraryUtils, LibraryFramework => ../LibraryFramework
doorman LibraryUtils => ../LibraryUtils, LibraryFramework => ../LibraryFramework
weaver LibraryUtils => ../LibraryUtils
LibraryClerkFramework LibraryUtils => ../LibraryUtils
LibraryAuditFramework LibraryUtils => ../LibraryUtils, LibraryFramework => ../LibraryFramework
auditor-application LibraryUtils => ../LibraryUtils, LibraryAuditFramework => ../LibraryAuditFramework

This means all repositories must be checked out as siblings in the same parent directory for local development to work.

Impact Analysis

Changes to foundational libraries have cascading impact:

Change In Affects
LibraryUtils Everything — all 10 other Go projects
LibraryFramework hery, doorman, LibraryAuditFramework, auditor-application
LibraryPluginFramework LibraryClerkFramework, LibraryAuditFramework
LibraryClerkFramework All clerk plugins
LibraryAuditFramework All auditor plugins

This is why the development plan starts bottom-up with LibraryUtils.