Every detected yoga is a full object, not a label.
It carries name and sanskrit_name in IAST transliteration, the category it belongs to, planets_involved, houses_involved, and condition_met as a human-readable sentence.
It carries a strength score from 0 to 100 plus a strength_breakdown that shows how each factor added up, so a weak yoga and a textbook one never look the same.
It carries is_cancelled, cancellation_strength, and bhanga_factors that list which cancellation rules fired.
It carries provenance (classical, modern, or contested), a citation such as 'BPHS Ch.
79', a controversy_note, the variant, the nature (benefic, malefic, mixed, or conditional), and effects split into positive and challenges arrays.
That structure means you can build a UI that explains each reading, link to the source text, and let a user audit why the app said what it said.
Strength, cancellation, citation, and provenance on every result