This chapter documents module ownership boundaries so new work is added in the correct layer.
Each blueprint owns:
views.py)util.py, filters.py, query builders)Module:
coyote/blueprints/homePrimary responsibilities:
Key routes:
/samples.../samples/<sample_id>/edit/samples/<sample_id>/reports/<report_id>/samples/<sample_id>/effective-genes/allModule:
coyote/blueprints/dnaPrimary responsibilities:
Key routes:
/dna/sample/<sample_id>/dna/<sample_id>/var/<var_id>/dna/<sample_id>/multi_class/dna/sample/<sample_id>/preview_report/dna/sample/<sample_id>/report/saveModule:
coyote/blueprints/rnaPrimary responsibilities:
Key routes:
/rna/sample/<id>K=/rna/fusion/<id>/rna/sample/preview_report/<id>/rna/sample/report/pdf/<id>Module:
coyote/blueprints/commonPrimary responsibilities:
Key routes:
/sample/<sample_id>/sample_comment/search/tiered_variants/reported_variants/variant/<variant_id>/<tier>Module:
coyote/blueprints/dashboardPrimary responsibilities:
Module:
coyote/blueprints/adminPrimary responsibilities:
Global shared templates:
coyote/templates/layout.htmlcoyote/templates/report_layout.htmlcoyote/templates/error.htmlFeature templates should remain under the owning blueprint. Cross-blueprint template dependencies should be minimized.
Tailwind is built from project sources and emitted to a single generated stylesheet used by templates.
Source and config:
coyote/static/css/tailwind.input.css (Tailwind entry file)tailwind.config.js (theme, content scanning, safelist)Generated output:
coyote/static/css/tailwind.cssWhere templates load the generated CSS:
coyote/templates/layout.html:
<link href="" rel="stylesheet">coyote/blueprints/common/templates/common_base.html:
<link rel="stylesheet" href="">Build commands (run from repo root):
npm install
npm run build:css
Development watch mode:
npm run dev:css
Keep npm run dev:css running while editing templates or Tailwind sources so coyote/static/css/tailwind.css stays current.
Route handlers enforce access with decorators. Template-level hiding is not sufficient.
Required pattern for state-changing routes: