Phase 0 of epic #2866. Records the decision that the install pipeline
resolves surface identity — (runtime × scope × trigger) — as a value
instead of implying it from destination paths.
The ADR makes four things explicit:
- Amends ADR-3660 (placement -> placement + trigger resolution) and says
why placement-only stopped paying: the /gsd-<name> trigger two
artifacts collide on is not a value anywhere, so #2218 cannot be
stated by any module or test.
- Adds one axis to ADR-1016's deliberately-closed descriptor vocabulary
(host trigger precedence), required-with-default so ADR-894's
additive-only stability contract holds.
- Records the @-include constraint (expands ~, does NOT expand env
vars, no conditional syntax) as the reason #2218 triage option 1 is
REFUTED rather than merely deprioritized.
- Notes the non-conflicts: completes ADR-58 rather than revising it,
and preserves ADR-1508's dependency direction.
ADR-3660 and ADR-1016 each gain the reciprocal Amended by back-link,
matching the corpus convention ADR-2782 already set on ADR-1016. Each
states that the decision is recorded now while the modules change at
Phase 2 (#2871), so no reader is told a widening has already shipped.
Also corrects CONTEXT.md's Installer Module entry: bin/install.js is
hand-authored, not generated. ADR-1508 states this verbatim and no
build step emits it; the stale annotation invites contributors to look
for a generator that does not exist.
Docs-only. Verified via the remote runner.
Closes#2869
Co-authored-by: sim <sim@local>