← Extractions

No 'Pundit' Intended — Rails Authorization by Yatish Mehta

At wroclove.rb 2025, Yatish Mehta (Asana) surveys Rails authorization approaches — implicit scopes, CanCan, Pundit — and their scaling problems, then introduces Fine-Grained Authorization (FGA / ReBAC) based on Google's Zanzibar. He presents his gem granity, which brings relationship-based access control with schema, tuples, smart caching, reverse lookups and audit paths to Rails apps, with Q&A on modeling sensitive tasks and syncing relationships.

Model
claude-opus-4-7
Ingestion
623af82e
Input tokens
197,088
fresh
131,154
cached
59,034
cache write
6,900
Output tokens
9,848
Duration
138.7s
Roundtrips
6
Tool calls
14
Cost
$0.00
Nodes/edges extracted
22 / 40
Read set (nodes/edges)
83 / 1

Nodes (22)

create permit.io tool
kind (empty) → tool
name (empty) → permit.io
slug (empty) → permit-io
attrs (empty) → {"category" => "service"}
description (empty) → Authorization-as-a-service provider (permit.io) based on Google's Zanzibar model. Surveyed by Yatish Mehta alongside ...
short_description (empty) → Authorization-as-a-service provider based on Zanzibar-style FGA.
create Figma company
kind (empty) → company
name (empty) → Figma
slug (empty) → figma
attrs (empty) → {"industry" => "design tools / SaaS"}
description (empty) → Collaborative design company. Referenced by Yatish Mehta via a Figma engineering blog post stating that around 23% of...
short_description (empty) → Collaborative design platform.
create Implicit Authorization concept
kind (empty) → concept
name (empty) → Implicit Authorization
slug (empty) → implicit-authorization
attrs (empty) → {"category" => "pattern"}
description (empty) → Authorization approach where access control is implicit in the query: for example, fetching a project scoped to the c...
short_description (empty) → Relying on query scopes to enforce access rather than explicit checks.
update Yatish Mehta person
attrs (empty) → {"role" => "Tech Lead, Authorization", "location" => "San Francisco, California, USA"}
description Conference speaker. → Rubyist for 10+ years based in San Francisco, California. Tech lead for authorization at Asana (HQ San Francisco, eng...
short_description Conference speaker. → Ruby developer, Asana authorization tech lead, author of granity gem.
update No 'Pundit' Intended talk
description Talk at wroclove.rb 2025. → wroclove.rb 2025 talk by Yatish Mehta ('Unduple the power of Rails authorization'). Walks through implicit query-scop...
short_description Talk at wroclove.rb 2025. → Survey of Rails authorization approaches leading to fine-grained, relationship-based access control.
create Asana company
kind (empty) → company
name (empty) → Asana
slug (empty) → asana
attrs (empty) → {"office" => "Warsaw, Poland", "industry" => "work collaboration / productivity SaaS", "headquarters" => "San Francis...
description (empty) → Work collaboration platform for managing projects and tasks. HQ in San Francisco with an engineering office in Warsaw...
short_description (empty) → Work collaboration platform for projects and tasks.
create Authentication concept
kind (empty) → concept
name (empty) → Authentication
slug (empty) → authentication
attrs (empty) → {"category" => "practice"}
description (empty) → Security concept dealing with identifying and verifying who a user is — username/password, SSO, SAML. Contrasted with...
short_description (empty) → Verifying who a user claims to be.
create Authorization concept
kind (empty) → concept
name (empty) → Authorization
slug (empty) → authorization
attrs (empty) → {"category" => "practice"}
description (empty) → Security concept dealing with what a user is allowed to do — which actions and permissions are granted to them once i...
short_description (empty) → Determining what actions or resources a user is allowed to access.
create CanCan tool
kind (empty) → tool
name (empty) → CanCan
slug (empty) → cancan
attrs (empty) → {"category" => "library"}
description (empty) → Authorization gem for Rails using a central ability.rb file that defines rules and permissions per user role and reso...
short_description (empty) → Ruby authorization gem centralizing abilities in a single file.
create action_policy tool
kind (empty) → tool
name (empty) → action_policy
slug (empty) → action_policy
attrs (empty) → {"category" => "library"}
description (empty) → Ruby authorization gem described by Yatish Mehta as 'a revised version of Pundit with additional features' — same str...
short_description (empty) → Revised Pundit-style Ruby authorization gem with additional features.
update Pundit tool
description Popular Ruby authorization gem. Meedan adopted Pundit when they first built Check with GraphQL, because graphql-ruby ... → Most popular Rails authorization gem. Provides Plain-Old-Ruby policy classes paired with resources, where each instan...
create Fine-Grained Authorization concept
kind (empty) → concept
name (empty) → Fine-Grained Authorization
slug (empty) → fine-grained-authorization
attrs (empty) → {"aliases" => "FGA; ReBAC; Relationship-Based Access Control", "category" => "architecture"}
description (empty) → Fine-Grained Authorization (FGA), also called Relationship-Based Access Control (ReBAC). Based on Google's Zanzibar p...
short_description (empty) → Relationship-based access control modeling permissions as a graph of tuples.
create Google Zanzibar resource
kind (empty) → resource
name (empty) → Google Zanzibar
slug (empty) → google-zanzibar
attrs (empty) → {"type" => "article"}
description (empty) → Google paper describing Zanzibar, Google's distributed authorization system used across their products. Foundation fo...
short_description (empty) → Google paper describing their distributed authorization system.
create granity tool
kind (empty) → tool
name (empty) → granity
slug (empty) → granity
attrs (empty) → {"license" => "open-source", "category" => "library", "language" => "Ruby"}
description (empty) → Ruby gem created by Yatish Mehta to support Fine-Grained Authorization in Rails apps. On install it adds a migration ...
short_description (empty) → Ruby gem bringing fine-grained (relationship-based) authorization to Rails.
create OpenFGA tool
kind (empty) → tool
name (empty) → OpenFGA
slug (empty) → openfga
attrs (empty) → {"category" => "service"}
description (empty) → Open-source Fine-Grained Authorization service inspired by Google's Zanzibar paper. Provides its own modeling DSL, a ...
short_description (empty) → Open-source authorization-as-a-service based on Google Zanzibar.
create Oso tool
kind (empty) → tool
name (empty) → Oso
slug (empty) → oso
attrs (empty) → {"category" => "service"}
description (empty) → Authorization-as-a-service platform (OSO) inspired by Google's Zanzibar. One of several external FGA providers survey...
short_description (empty) → Authorization-as-a-service platform based on Zanzibar-style modeling.
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale takeaway
kind (empty) → takeaway
name (empty) → Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale
slug (empty) → start-with-pundit-add-granity-for-fga-adopt-authorization-as-a-service-at-distributed-scale
attrs (empty) → {"type" => "recommendation"}
description (empty) → Yatish Mehta's summary recommendation: start simple with Pundit; when the app's permission model outgrows policies, a...
short_description (empty) → Progressive path for Rails authorization complexity.
create Model permissions as a graph, check them as path existence takeaway
kind (empty) → takeaway
name (empty) → Model permissions as a graph, check them as path existence
slug (empty) → model-permissions-as-a-graph-check-them-as-path-existence
attrs (empty) → {"type" => "insight"}
description (empty) → Core insight of FGA/ReBAC as presented by Yatish Mehta: rather than evaluating black-box per-permission logic, store ...
short_description (empty) → Frame authorization as graph reachability over relationship tuples.
create Tuples must be kept in sync with domain data takeaway
kind (empty) → takeaway
name (empty) → Tuples must be kept in sync with domain data
slug (empty) → tuples-must-be-kept-in-sync-with-domain-data
attrs (empty) → {"type" => "warning"}
description (empty) → Warning from Yatish Mehta: using FGA effectively duplicates many-to-many/foreign-key relationships from your domain m...
short_description (empty) → Moving many-to-many relationships into an FGA store creates a sync obligation.
create How to model sensitive tasks in FGA? question
kind (empty) → question
name (empty) → How to model sensitive tasks in FGA?
slug (empty) → how-to-model-sensitive-tasks-in-fga
attrs (empty) → {"answer_summary" => "Introduce a sensitive_task entity related to task via an 'is_sensitive' relation; the authoriza...
description (empty) → Audience question asking how Yatish Mehta's sensitive-task rule (only admins can edit a sensitive task) is modeled in...
short_description (empty) → Q&A: representing a sensitive-task override in the authorization schema.
create How hard is it to keep authorization relationships in sync? question
kind (empty) → question
name (empty) → How hard is it to keep authorization relationships in sync?
slug (empty) → how-hard-is-it-to-keep-authorization-relationships-in-sync
attrs (empty) → {"answer_summary" => "Yes, it's a real overhead; duplicate relevant relationships into tuples and keep them in sync v...
description (empty) → Audience question about the difficulty of keeping tuples consistent with domain models. Answer: it is a real challeng...
short_description (empty) → Q&A: operational cost of maintaining tuples alongside domain data.
create Defining scopes with relationship-based access control question
kind (empty) → question
name (empty) → Defining scopes with relationship-based access control
slug (empty) → defining-scopes-with-relationship-based-access-control
attrs (empty) → {"answer_summary" => "ReBAC has no built-in scope mechanism; you must explicitly query the relationship graph. Pundit...
description (empty) → Audience question: Pundit lets you define scopes within a policy for filtering collections — what is the pattern with...
short_description (empty) → Q&A: equivalent of Pundit scopes in ReBAC-based authorization.

Edges (40)

update Yatish Mehta → authored → No 'Pundit' Intended
context (empty) → Yatish delivered this talk at wroclove.rb 2025.
update No 'Pundit' Intended → presented_at → wroclove.rb 2025
context (empty) → Talk delivered at the March 2025 edition of wroclove.rb.
create Yatish Mehta → works_at → Asana
attrs (empty) → {"role" => "Tech Lead, Authorization"}
context (empty) → Tech lead for authorization at Asana, based in San Francisco with an engineering office in Warsaw.
relation (empty) → works_at
source_node_id (empty) → 98f7dc64-d973-47e7-8f82-2dde7d2d640a
target_node_id (empty) → f751cc3c-2cee-4cb8-a5bf-c8083d983313
create Yatish Mehta → works_on → granity
attrs (empty) → {"role" => "author"}
context (empty) → Author/creator of the granity gem for FGA in Rails.
relation (empty) → works_on
source_node_id (empty) → 98f7dc64-d973-47e7-8f82-2dde7d2d640a
target_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create No 'Pundit' Intended → about → Authentication
context (empty) → Talk introduces the authentication vs authorization distinction.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → e1879252-4584-436e-bdcb-e159412c5299
create No 'Pundit' Intended → about → Authorization
context (empty) → Core subject of the talk.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → f582878b-8b76-40c2-8d72-49bfceecc0e7
create No 'Pundit' Intended → about → Implicit Authorization
context (empty) → First approach surveyed — authorization via query scopes.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 3cd65ed8-2fbf-47ad-b324-cd332667ad84
create No 'Pundit' Intended → about → CanCan
context (empty) → Surveyed as the second approach, with its scaling limitations.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → f5b0bf6d-f6aa-464a-8309-afc1b91c0f65
create No 'Pundit' Intended → about → Pundit
context (empty) → Surveyed as the most popular Rails authorization gem and its limitations at scale.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create No 'Pundit' Intended → about → action_policy
context (empty) → Mentioned as a revised-Pundit alternative with the same philosophy.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 41876bfc-1d5b-4148-892e-b10738b2a7c1
create No 'Pundit' Intended → about → Fine-Grained Authorization
context (empty) → Central proposal of the talk: FGA / relationship-based access control.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create No 'Pundit' Intended → about → Google Zanzibar
context (empty) → Cites the Google Zanzibar paper as the foundation of FGA.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → aece4012-6f32-4e96-956a-38371140ea7f
create No 'Pundit' Intended → about → granity
context (empty) → Introduces and demos Yatish's granity gem.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create No 'Pundit' Intended → about → OpenFGA
context (empty) → Listed among external FGA providers based on Zanzibar.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → cf8610de-33c3-4888-9377-8d7cce29d455
create No 'Pundit' Intended → about → Oso
context (empty) → Listed among external FGA providers.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 48bc1800-666a-4e34-9e56-2dac387ab77b
create No 'Pundit' Intended → about → permit.io
context (empty) → Listed among external FGA providers.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 921fb6cb-5d6b-49fa-80d6-b7afd7a5b201
create No 'Pundit' Intended → about → Devise
context (empty) → Mentioned as the typical Rails gem for authentication.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 9113bde3-534a-47d0-8333-e171c4b55e79
create No 'Pundit' Intended → about → Figma
context (empty) → Cites Figma's blog claim that ~23% of SQL queries relate to access control.
relation (empty) → about
source_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) → 6807c0f9-cd45-402d-8606-116e7f6e2b03
create Fine-Grained Authorization → related_to → Google Zanzibar
context (empty) → FGA/ReBAC is based on the Google Zanzibar paper.
relation (empty) → related_to
source_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
target_node_id (empty) → aece4012-6f32-4e96-956a-38371140ea7f
create granity → related_to → Fine-Grained Authorization
context (empty) → granity implements FGA/ReBAC for Rails.
relation (empty) → related_to
source_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create OpenFGA → related_to → Google Zanzibar
context (empty) → OpenFGA is based on Zanzibar.
relation (empty) → related_to
source_node_id (empty) → cf8610de-33c3-4888-9377-8d7cce29d455
target_node_id (empty) → aece4012-6f32-4e96-956a-38371140ea7f
create Oso → related_to → Google Zanzibar
context (empty) → Oso's model is based on Zanzibar.
relation (empty) → related_to
source_node_id (empty) → 48bc1800-666a-4e34-9e56-2dac387ab77b
target_node_id (empty) → aece4012-6f32-4e96-956a-38371140ea7f
create permit.io → related_to → Google Zanzibar
context (empty) → permit.io is based on Zanzibar.
relation (empty) → related_to
source_node_id (empty) → 921fb6cb-5d6b-49fa-80d6-b7afd7a5b201
target_node_id (empty) → aece4012-6f32-4e96-956a-38371140ea7f
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale → from_talk → No 'Pundit' Intended
context (empty) → Explicit closing recommendation of the talk.
relation (empty) → from_talk
source_node_id (empty) → ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale → about → Pundit
context (empty) → Recommends starting with Pundit.
relation (empty) → about
source_node_id (empty) → ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) → 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale → about → granity
context (empty) → Recommends adopting granity for FGA needs.
relation (empty) → about
source_node_id (empty) → ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale → about → Fine-Grained Authorization
context (empty) → Mid-step of the recommendation: introduce FGA.
relation (empty) → about
source_node_id (empty) → ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Model permissions as a graph, check them as path existence → from_talk → No 'Pundit' Intended
context (empty) → Core conceptual insight presented in the talk.
relation (empty) → from_talk
source_node_id (empty) → 36d05fed-f7c6-4f93-ba1f-47af4945ef77
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Model permissions as a graph, check them as path existence → about → Fine-Grained Authorization
context (empty) → Insight describes how FGA frames permission checks.
relation (empty) → about
source_node_id (empty) → 36d05fed-f7c6-4f93-ba1f-47af4945ef77
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Tuples must be kept in sync with domain data → from_talk → No 'Pundit' Intended
context (empty) → Warning raised in Q&A and reinforced in the talk.
relation (empty) → from_talk
source_node_id (empty) → 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Tuples must be kept in sync with domain data → about → granity
context (empty) → Applies directly to granity users.
relation (empty) → about
source_node_id (empty) → 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create Tuples must be kept in sync with domain data → about → Fine-Grained Authorization
context (empty) → General property of FGA implementations.
relation (empty) → about
source_node_id (empty) → 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create How to model sensitive tasks in FGA? → asked_at → No 'Pundit' Intended
context (empty) → Audience Q&A following the talk.
relation (empty) → asked_at
source_node_id (empty) → aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create How to model sensitive tasks in FGA? → about → Fine-Grained Authorization
context (empty) → About modeling special-case rules in an FGA schema.
relation (empty) → about
source_node_id (empty) → aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create How to model sensitive tasks in FGA? → about → granity
context (empty) → Answered in the context of granity's schema.
relation (empty) → about
source_node_id (empty) → aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) → ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create How hard is it to keep authorization relationships in sync? → asked_at → No 'Pundit' Intended
context (empty) → Audience Q&A following the talk.
relation (empty) → asked_at
source_node_id (empty) → a9637e9d-9bf4-4925-9d0d-f77de72ef59d
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create How hard is it to keep authorization relationships in sync? → about → Fine-Grained Authorization
context (empty) → About the operational cost of maintaining an FGA tuple store.
relation (empty) → about
source_node_id (empty) → a9637e9d-9bf4-4925-9d0d-f77de72ef59d
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Defining scopes with relationship-based access control → asked_at → No 'Pundit' Intended
context (empty) → Audience Q&A following the talk.
relation (empty) → asked_at
source_node_id (empty) → e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) → a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Defining scopes with relationship-based access control → about → Pundit
context (empty) → Compares ReBAC to Pundit's scopes feature.
relation (empty) → about
source_node_id (empty) → e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) → 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Defining scopes with relationship-based access control → about → Fine-Grained Authorization
context (empty) → Discusses what ReBAC gives (and doesn't give) for collection filtering.
relation (empty) → about
source_node_id (empty) → e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) → d896a90d-cbc8-4517-aef9-3fb1d3d077e2

Read set

83 nodes

event 2NIT Nerds on Lakes Sailing Trip list_nodes_by_kind event Advent of Code list_nodes_by_kind event Brighton Ruby list_nodes_by_kind event EmberConf list_nodes_by_kind event Eventide Summit 2023 list_nodes_by_kind event Hacktoberfest list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event Rails World list_nodes_by_kind event RubyKaigi list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind event wroclove.rb 2019 list_nodes_by_kind event wroclove.rb 2022 list_nodes_by_kind event wroclove.rb 2023 list_nodes_by_kind event wroclove.rb 2024 list_nodes_by_kind event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind tool devise_token_auth search_nodes tool devise_token_authenticatable search_nodes takeaway Use devise_token_auth for API tokens search_nodes question Using external auth providers instead of Devise search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes tool Devise search_nodes tool devise-two-factor search_nodes tool Tyrant search_nodes tool Pundit search_nodes company Auth0 search_nodes question Authorization strategies in GraphQL search_nodes concept Strong Parameters search_nodes project gemcheck search_nodes tool langchainrb search_nodes talk Methods Gem for Ruby Method References search_nodes tool bump gem search_nodes tool methods gem search_nodes takeaway Name Things To Find Their Properties search_nodes project granite search_nodes tool HTTP gem search_nodes tool Ruby LLM search_nodes concept AI Agent search_nodes tool RealtimeBoard search_nodes takeaway Ask the Most Human Question Possible search_nodes company Zendesk search_nodes tool GraphQL search_nodes tool Requestly search_nodes tool Apollo GraphQL Platform search_nodes concept Direct Upload to Cloud search_nodes tool PagerDuty search_nodes company SpaceX search_nodes company ThoughtWorks search_nodes company Salesforce search_nodes tool CircleCI search_nodes tool JIRA search_nodes talk Offline Sandwich Focus Workflow search_nodes project Zite search_nodes company GitHub search_nodes tool Release Drafter search_nodes takeaway Prompts as Business Logic search_nodes tool aggregate_root search_nodes tool graphql-ruby search_nodes tool pganalyze search_nodes concept Selective MFA Rollout search_nodes takeaway Time Travel Superpower search_nodes concept Retrieval Augmented Generation search_nodes concept Action search_nodes tool Active Admin search_nodes tool acts_as_api search_nodes tool Action Cable search_nodes tool Tailwind CSS search_nodes resource shadcn/ui search_nodes company Transloadit search_nodes tool Apollo GraphQL search_nodes tool Render search_nodes tool Speaker Deck search_nodes project Ruby UI search_nodes tool Miro search_nodes question Isn't asking password confirmation business logic? search_nodes takeaway MFA improves account-sharing health search_nodes question Why MFA via email and not authenticator app or SMS? search_nodes person Yatish Mehta search_nodes+get_node_edges concept MCP Server search_nodes project Check search_nodes takeaway Collect as much video metadata as you can search_nodes tool ChatGPT search_nodes concept Rubber Duck Debugging search_nodes

1 edges