Skip to content

architecture: dependency resolution (mechanics for the dependency-modeling patterns) - #47

Merged
croadfeldt merged 3 commits into
mainfrom
feat/dependency-resolution
Jul 13, 2026
Merged

croadfeldt merged 3 commits into
mainfrom
feat/dependency-resolution

Conversation

@croadfeldt

@croadfeldt croadfeldt commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Documents how DCM resolves dependencies — authored several ways (direct edge, component chain, or routed through a shared node) and inserted several ways (authored/discovered/derived/provider/policy) — into one effective graph that consumers (ordered shutdown/startup, topology, blast-radius) run on. Includes the resolution pass, cycle detection, and best-practice granularity guidance.

The one real derivation is scope (a tenant_uuid is a field, not an edge, so the resolver injects the realm's identity/DNS). Everything else is already ordinary edges: component chains (host → PSU → feed) and bundling — depend on a node that carries shared deps and you inherit them transitively — need no expansion pass. That is why there is no DependencyBundle type: it would reproduce transitivity for no gain. The doc carries the anti-pattern note explaining this.

Pairs with the UDLM data-model side: #67 (merged — the dependency-modeling type set: PowerSupply, Location) and croadfeldt/udlm#68 (retires the DependencyBundle type as an anti-pattern and adds docs/dependency-modeling.md + the anonymized examples this walkthrough references).

How DCM merges the authored UDLM estate + discovered/derived/provider/policy dependencies into one
effective dependency graph that consumers (ordered shutdown/startup, visualizers, impact analysis)
run on. Documents the insertion mechanisms, the build-time resolution pass (bundle expansion, scope
derivation, transitive chains, cycle detection), and best-practice guidance on choosing an authoring
pattern/granularity. Pairs with UDLM docs/dependency-modeling.md (the data-model side).

Co-Authored-By: Chris Roadfeldt <chris@roadfeldt.com>
… example)

Worked example showing the resolution pass collapse four authoring patterns (component-chain power,
realm bundle, direct edge, location) into one effective graph + derived shutdown order: bundle
expansion adds 8 derived edges, PSU->feed chains give host-a the union of both rails, control-plane
identity/DNS sort last. Pairs with architecture/dependency-resolution.md + UDLM examples/dependency-modeling.

Co-Authored-By: Chris Roadfeldt <chris@roadfeldt.com>
Bundling is plain transitivity (depend on a node that carries shared deps -> inherit them as
secondary deps), so there is no bundle-expansion pass and no DependencyBundle type. Scope-derivation
(tenant field -> edges) is the only real derivation. Add an explicit anti-pattern note; rework the
walkthrough to the core-services shared-node example.

Co-Authored-By: Chris Roadfeldt <chris@roadfeldt.com>
@croadfeldt
croadfeldt merged commit 1151d11 into main Jul 13, 2026
3 checks passed
@croadfeldt
croadfeldt deleted the feat/dependency-resolution branch July 23, 2026 18:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant