Overview
RelTalk names the relation-facing workflow in the DotTalk++ / x64base system.
Its subject is connected data across work areas: declared relation edges,
asymmetric same-field/cross-owner links, saved workspace relation state, and
rooted traversal through ERSATZ.
The local project includes same-field relation support and asymmetric relation forms such as:
REL ADD SYSCMD SYSSUBCMD ON CAN_NAME TO PARENT
REL ADD SYSSUBCMD SYSENTVAR ON QUAL_NAME TO HELP_OWNR
Current relation-facing surfaces include:
REL ADDREL LIST ALLREL JOIN [DISTINCT|ALL] [LIMIT <n>] [<child> ...] TUPLE <alias>.<field>[, ...]REL ENUM [LIMIT <n>] [<child> ...] TUPLE <alias>.<field>[, ...]REL REFRESHREL SCANLIMIT [<n>]WORKSPACE SAVE/WORKSPACE LOADERSATZ,ERSATZ PATH, andRBROWSE- workspace graph and GUI contract docs
The join
REL JOIN walks a declared parent and its children and emits one tuple per
combination, projecting the <alias>.<field> list named after TUPLE. It is a true
enumerator: it delegates to the same walker as REL ENUM
(src/cli/join_engine.cpp). The historical single-row form -- one tuple built
from wherever the relation pointers currently sit -- is preserved as
REL JOIN ONE, and ONE given a child chain is refused rather than
silently ignored, because a traversal that never happened should not report
success (AIF-147).
REL SCANLIMIT sets the relation engine's per-hop record budget. It caps what a
traversal finds, not what is displayed -- lowering it changes match counts
and drops join rows, where ERSATZ LIMIT only shortens the screen. A truncated
REL JOIN or REL ENUM restates the limit and the row count at the result, and
REL LIST says it is reporting lower bounds, because a truncated count is not a
short list: it is a wrong number in the shape of a right one.
See RelTalk docs, Current Project Truth, and the canonical public repo deraldg/x64base.