Closes the last promote gap: a manifest can now reference records it does NOT create. A value like "#thirdparty:name=KissMetrics" (or :code=CL0007) is looked up on the TARGET at apply time and resolved to that target's id — so the same manifest is portable (sandbox id on --target sandbox, prod id on --target prod). promote-apply.sh: resolve() gains a "#" branch + a lookup() helper that queries the target via the GET wrapper with sqlfilters. Supports thirdparty (name/code/supplier_code) and invoice/supplierinvoice (ref/ref_supplier). A lookup matching nothing OR more than one record ABORTS the run — it never guesses, so it cannot write to the wrong entity. Proven live: "#thirdparty:name=ACME Conseil" resolved to the existing client and invoiced it; a not-found code and an ambiguous (2-match) name both aborted with exit 1. Combined with @refs, arbitrary self-contained-or-referential change-sets now replay cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.9 KiB
Executable File
4.9 KiB
Executable File