Build linked product system
lca_compose_linkedBuild a product system as an explicit process network with supply edges. Every member and supply edge is sent in one call. Structure only; no LCIA runs. For a list of materials and quantities, lca_compose_assembly is simpler. A link may route a waste output to its treatment (consumer_ref outputs it, provider_ref treats it). ref_process_ref is the functional unit's process and also appears in member_process_refs. It is validated against the database; if valid it is saved and system_ref is returned for lca_run_assessment. If invalid, the response lists errors[], missing_required[] and warnings[] and nothing is saved; a corrected call carries the complete system. dry_run: true validates without saving. A tool error (not an invalid result) means the engine is unavailable. Takes p<N>/f<N> refs; UUIDs are not accepted. Requires the user's own writable engine; an unreachable member blocks the build. The product_system_authoring skill (load_skill) covers build order and failures.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| links | No | Supply edges connecting members: a supplier's product into a consumer's input, or a consumer's waste output into its treatment. | |
| title | No | Human title for the authored system. | |
| engine | No | Name of the engine database, as `lca_get(kind='engines')` lists it (case-insensitive). Omitted: this connection's default engine. | |
| dry_run | No | When true, validate ONLY — return the envelope without persisting (and without a confirmation prompt). Default false: a valid system is built and its s-ref returned in this one call. | |
| workspace | Yes | Name of the workspace to work in, as `lca_get(kind='workspaces')` lists it (backticks optional). Named on every call: several conversations can share one connection, and each names its own workspace. The connection's default is often an empty sandbox rather than the user's work. | |
| ref_flow_ref | No | `f<N>` ref of the reference product flow (a product OUTPUT of the ref process). | |
| target_amount | No | Functional-unit amount (default 1.0). | |
| temporal_scope | No | Temporal scope of the system (e.g. '2020-2024', 'Reference year 2022'). | |
| cutoff_criteria | No | Explicit cutoff criteria (e.g. 'Mass cutoff 1%; energy cutoff 1%'). Overrides the scope-derived default. | |
| ref_process_ref | Yes | `p<N>` ref of the reference process (the functional unit). It must also be listed in `member_process_refs`. | |
| target_unit_ref | No | The functional unit's unit, when it is NOT the reference exchange's own unit (which is derived for you). A unit NAME as the engine spells it ('t', 'kg', 'MJ'), resolved against the reference flow's unit group — NOT a ref: there is no `u<N>` kind, and an f/p/s ref here is rejected. | |
| geographical_scope | No | Explicit geographical scope (e.g. 'Switzerland'). Overrides location codes derived from member processes. | |
| member_process_refs | Yes | `p<N>` refs of every process in the system — include the reference process. | |
| functional_unit_description | No | Free-text description of the functional unit (e.g. 'One house, 160 m², 50-year service life'). |