Prompt #128
Back to promptsyoga plugin with EDA + tenant-overrides
- Variables
- {'name': 'plugin_name', 'description': 'snake_case'}, {'name': 'feature', 'description': 'what + why'}
- Tags
- stack-aware,yoga,plugin,multi-tenant,eda,strict-separation
- Source
- research-2026-05-01-stack-aware-handcrafted
- Use count
- 0
- Created
- 2026-05-01T18:30:35.938632+00:00
- Updated
- 2026-05-01T18:30:35.938632+00:00
Content
Add a yoga.{plugin_name} plugin in `/nvmetank1/docker/yoga/plugins/{plugin_name}/` (post-Wave-1+2 separation: yoga lives in its own repo).
Files:
1. `__init__.py` with PLUGIN dict β id `yoga.{plugin_name}` (yoga prefix indicates yoga-app domain)
2. `manifest.toml` mirror
3. EDA hooks: `helpers.py:register_signal_subscribers(app)` β subscribe to existing signals like `customer_created`, `appointment_status_changed`, `order_completed`, etc. Don't directly import other plugins; use signals.
4. `db_migrations` in PLUGIN dict for new tables (auto-applied on enable_plugin())
5. `routes_admin.py` (Authelia-protected admin UI), `routes_public.py` (tenant-public routes)
6. `tests/test_{plugin_name}.py`
Tenant-override mounts (multi-tenant feature):
- Templates: `/persistent/yoga-templates/` β `/app/templates/yoga-tenant-overrides`
- Plugins: `/persistent/yoga-plugins/` β `/app/plugins/yoga-tenant-plugins` (per-tenant plugin overrides)
- Images: `/persistent/yoga-images/` β `/app/static/template_assets/cmoments`
- Tenant data: `/docker-yaml/config/yoga-glug-{channel}/yoga.db` (current/dev/beta channels)
If plugin needs RAG access: HTTP only (`requests.get('http://192.168.1.216:8801/api/v1/lessons/search?q=...')`). NEVER `from rag_stack import` β strict separation per user directive 2026-05-01.
Feature: {feature}