59 lines
2.6 KiB
Text
59 lines
2.6 KiB
Text
|
|
let d = import "core.ncl" in
|
||
|
|
|
||
|
|
{
|
||
|
|
lift_out_practice = d.make_node {
|
||
|
|
id = "lift-out-practice",
|
||
|
|
name = "Component Lift-Out",
|
||
|
|
pole = 'Yang,
|
||
|
|
level = 'Practice,
|
||
|
|
description = "A component developed inside a host project is extracted as an independent peer project when it passes the four-criterion test: orthogonal concern, plurality of consumers, divergent release cadence, and path-agnostic config. The extracted project registers in ontoref before any code moves.",
|
||
|
|
adrs = ["adr-016-component-lift-out-pattern"],
|
||
|
|
},
|
||
|
|
|
||
|
|
lift_readiness_practice = d.make_node {
|
||
|
|
id = "lift-readiness",
|
||
|
|
name = "Lift Readiness Evaluation",
|
||
|
|
pole = 'Spiral,
|
||
|
|
level = 'Practice,
|
||
|
|
description = "Before extracting a component, four criteria are evaluated: (1) orthogonal concern — the component's domain is not the host's domain; (2) consumer plurality — at least two distinct callers exist or are imminent; (3) release cadence divergence — the component's lifecycle does not match the host's; (4) config path-agnostic — the component can receive its config from any caller without importing host infrastructure.",
|
||
|
|
adrs = ["adr-016-component-lift-out-pattern"],
|
||
|
|
},
|
||
|
|
|
||
|
|
premature_decomposition_tension = d.make_node {
|
||
|
|
id = "premature-decomposition",
|
||
|
|
name = "Premature Decomposition Tension",
|
||
|
|
pole = 'Yin,
|
||
|
|
level = 'Tension,
|
||
|
|
description = "Extracting a component before it has proven orthogonality and multiple consumers creates coordination overhead without autonomy benefits. The four-criterion gate is the safeguard.",
|
||
|
|
},
|
||
|
|
|
||
|
|
host_coupling_tension = d.make_node {
|
||
|
|
id = "host-coupling",
|
||
|
|
name = "Host Coupling Tension",
|
||
|
|
pole = 'Yin,
|
||
|
|
level = 'Tension,
|
||
|
|
description = "A component that imports host-project infrastructure (config loaders, schema registries, workspace crates) cannot be an independent peer. Host coupling is the primary blocker for lift-out and must be severed at extraction time.",
|
||
|
|
},
|
||
|
|
|
||
|
|
edges = [
|
||
|
|
d.make_edge {
|
||
|
|
from = "lift-readiness",
|
||
|
|
to = "lift-out-practice",
|
||
|
|
kind = 'FlowsTo,
|
||
|
|
note = "readiness evaluation gates the extraction decision",
|
||
|
|
},
|
||
|
|
d.make_edge {
|
||
|
|
from = "premature-decomposition",
|
||
|
|
to = "lift-out-practice",
|
||
|
|
kind = 'TensionWith,
|
||
|
|
note = "extracting too early defeats the purpose",
|
||
|
|
},
|
||
|
|
d.make_edge {
|
||
|
|
from = "host-coupling",
|
||
|
|
to = "lift-readiness",
|
||
|
|
kind = 'LimitedBy,
|
||
|
|
note = "coupling to host infrastructure fails criterion 4",
|
||
|
|
},
|
||
|
|
],
|
||
|
|
}
|