Skip to content

docs(static-variables): recover orphaned PR #1035 + clarify deterministic ≠ invisible#1038

Merged
dhruva-reddy merged 1 commit intomainfrom
dr/static-variables-recover-and-clarify-determinism
Apr 29, 2026
Merged

docs(static-variables): recover orphaned PR #1035 + clarify deterministic ≠ invisible#1038
dhruva-reddy merged 1 commit intomainfrom
dr/static-variables-recover-and-clarify-determinism

Conversation

@dhruva-reddy
Copy link
Copy Markdown
Contributor

@dhruva-reddy dhruva-reddy commented Apr 29, 2026

Description

Two combined goals — recovering work that was lost in a stacked-PR merge-order accident, and applying wording corrections the user flagged in review of the original page.

Why this PR is needed

Previous PR #1035 was orphaned by an inverted merge order:

Time (PT, 2026-04-29) Event Result
11:03:40 PR #1033 squash-merged → main 3887bf0 lands on main: 2 files, +189 lines (squads page + nav entry)
11:04:05 (+25s) PR #1035 squash-merged → its base (dr/squads-passing-data-between-assistants) 3bbefdb lands on the parent branch: static-variables-and-aliases.mdx +277/-14

Because the parent merged to main BEFORE the child merged into the parent, PR #1035's commit 3bbefdb was applied to a branch that was effectively obsolete. Its content never propagated to main. GitHub's UI shows PR #1035 as MERGED (technically true — it merged into its base), but the parent branch was already squashed into main as a different commit. The orphaned 3bbefdb is reachable on GitHub by SHA but is not on any branch.

This PR cherry-picks 3bbefdb onto fresh main, then layers the wording corrections on top.

What lands in this PR

Recovered from the orphaned PR #1035 commit:

  • Trust-tier framing for the Liquid variable bag (Tier 1 server-trusted, Tier 2 conversation-derived, Tier 3 LLM-derived)
  • Five common failure modes with bad/good code pairs covering the patterns that defeat the static-parameters security boundary
  • Prompt-injection threat-model framing surfaced by an FDE conversation about progressive caller-ID authentication
  • "Static parameters as a security boundary" section
  • Worked caller-ID-based progressive-authentication example
  • Tool-type support matrix, plus an explicit warning that legacy assistant.model.functions[] does NOT support static parameters
  • Handoff-data-forwarding section (cross-linking to /squads/passing-data-between-assistants)
  • Dashboard mental model — Parameters (JSON schema editor) vs. Static Body Fields (key/value rows with Liquid)

New wording corrections layered on top:

The original page conflated two different guarantees:

  1. Static parameters are truly LLM-invisible — server-merged into the request body, never in the schema sent to the model.
  2. variableExtractionPlan aliases chain values across tools deterministically, but the source response IS in the LLM's context (added to conversation history as a role: "tool" message).

Specific edits:

  • Subtitle: split the two guarantees, no longer claims both are "without LLM involvement"
  • Intro bullet: changed "Chain tools so data flows between them without LLM involvement" → "deterministically — the next tool gets the correct value regardless of how the LLM behaves between calls"
  • Deterministic tool chaining intro: rewritten + a new <Warning> callout titled "Deterministic does not mean invisible" that explicitly contrasts the determinism guarantee (alias) with the invisibility guarantee (static parameters)
  • Tips section: new bullet "Aliases are a determinism primitive, not an invisibility primitive" — flagging that hiding values from the model requires the tool server to omit them from the response body in the first place

Testing Steps

  • fern check — 0 errors
  • All 15 JSON code blocks validate
  • Pre-flight gt log short shows the branch as connected to main
  • Pre-flight git log origin/main..HEAD shows exactly 1 commit
  • Verify trust-tier tables, failure-mode bad/good pairs, and the new Warning callout render correctly on the preview deployment
  • Verify cross-link to /squads/passing-data-between-assistants resolves
  • Spot-check the Tips section reads cleanly with the new alias-vs-static-parameters distinction
  • Style guide compliance (active voice, present tense, no marketing language)

Skipped

  • test-writer / code-reviewer (docs-only PR, per write-pr skill skip rules)

Related

…stic ≠ invisible

Two combined goals -- the previous PR #1035 was orphaned by an inverted
merge order (parent #1033 squash-merged to main 25 seconds before child
#1035 squash-merged into the parent's branch, so #1035's content was
applied to a branch that was already obsolete and never propagated to
main). This restores that hardening AND fixes wording the user flagged
in review of the original page.

Recovers from orphaned commit 3bbefdb the full PR #1035 hardening
work: trust tiers (Tier 1 server-trusted, Tier 2 conversation-derived,
Tier 3 LLM-derived), five common failure modes, prompt-injection
threat-model framing, dashboard mental model, handoff-data-forwarding
section, legacy assistant.model.functions[] footgun warning, the
'Static parameters as a security boundary' section, and the worked
caller-ID example.

Wording fixes applied on top of that recovery, eliminating language
that conflated two different guarantees -- (1) static parameters are
truly LLM-invisible (server-merged into the request body, never in
the schema sent to the model) vs. (2) variableExtractionPlan aliases
chain values across tools deterministically but the source response
IS in the LLM's context (it was added to conversation history as a
role: tool message). Specific changes:

- Subtitle (line 3): split the two guarantees, no longer claims both
  are 'without LLM involvement'
- Intro bullet (line 19): 'deterministically -- the next tool gets
  the correct value regardless of how the LLM behaves between calls'
- Deterministic tool chaining intro (line 457): rewritten + new
  Warning callout explicitly stating 'Deterministic does not mean
  invisible' with the specific code-level claim that Tool A's
  response is added to the LLM's role:tool message history
- Tips section: new bullet 'Aliases are a determinism primitive,
  not an invisibility primitive', flagging that hiding values from
  the model requires the tool server to omit them from the response
  body in the first place

Skipped: test-writer / code-reviewer (docs-only PR).
Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

@dhruva-reddy dhruva-reddy merged commit 8d316d4 into main Apr 29, 2026
7 checks passed
@dhruva-reddy dhruva-reddy deleted the dr/static-variables-recover-and-clarify-determinism branch April 29, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant