The shortcode calling convention spec docs in PLAN.md (~L1894) and IMPLEMENTATION.md (~L613) describe the argument resolution approach as using context.Evaluate(token.value) directly. However, TagContext.Evaluate expects evaluable objects (e.g., *VariableLookup), not plain strings — passing a string returns the string unchanged.
The implementation correctly uses liquid.VariableLookupParse(name, nil, nil) to parse the variable name into a *VariableLookup, then calls context.Evaluate(vl) to resolve it.
Update both spec docs to reflect the actual parseTagTokens → resolveTagArgs → resolveVariable flow, including:
VariableLookupParse for variable name parsing
context.Evaluate on the parsed *VariableLookup (not raw strings)
- Literal fallback when
Evaluate returns nil
Found during PR #1023 review (finding #6 from both CodeRabbitAI and human reviewer).
Refs #981
The shortcode calling convention spec docs in PLAN.md (~L1894) and IMPLEMENTATION.md (~L613) describe the argument resolution approach as using
context.Evaluate(token.value)directly. However,TagContext.Evaluateexpects evaluable objects (e.g.,*VariableLookup), not plain strings — passing a string returns the string unchanged.The implementation correctly uses
liquid.VariableLookupParse(name, nil, nil)to parse the variable name into a*VariableLookup, then callscontext.Evaluate(vl)to resolve it.Update both spec docs to reflect the actual
parseTagTokens → resolveTagArgs → resolveVariableflow, including:VariableLookupParsefor variable name parsingcontext.Evaluateon the parsed*VariableLookup(not raw strings)Evaluatereturns nilFound during PR #1023 review (finding #6 from both CodeRabbitAI and human reviewer).
Refs #981