Problem #
app/routes/api/lexicons/[nsid].ts:41 prepends a synthetic { path: "repo" } field to every lexicon. AutomationForm.tsx:1103-1106 turns every field into event.commit.record.${path}, so the placeholders panel offers event.commit.record.repo.
lib/jetstream/matcher.ts:57 only maps the bare legacy "repo" to event.did. The full path walks commit.record.repo, gets undefined, and any condition using it is never true. validate-steps.ts accepts it because the root is event, so there is no error.
It also has the same description as event.did ("DID of the repo that emitted the event"), so users can't tell them apart.
Seen in the session #
In https://www.youtube.com/watch?v=5MnT-ZgbBIc:
- 0:39:50 and 0:47:30: "why is this different than this? Those say the same thing to me."
- About 1:13: switching the condition to it makes the automation stop firing, with nothing in the logs.
Fix direction #
- Stop advertising
repoas a record field (exposeevent.didonly), or mapevent.commit.record.repotoevent.didin the matcher. - Have validation flag record paths that aren't in the lexicon schema.
Details: docs/brainstorms/2026-10-17-graze-conference-automation-feedback.md (B3).
What’s still open from the issue: