{% load scitex_project_picker %}{% comment %} _project_picker.html — the canonical SDK project picker, reached ONLY through a guarded `{% templatetag openblock %} include {% templatetag closeblock %}` so that NO page `{% templatetag openblock %} load {% templatetag closeblock %}`s the tag library directly. WHY THE LOAD LIVES HERE AND NOWHERE ELSE. `{% templatetag openblock %} load scitex_project_picker {% templatetag closeblock %}` against a library that is not installed is a hard TemplateSyntaxError raised while the template COMPILES — before any view runs, before any context flag is read, before any runtime guard gets a say. A page-level guard therefore cannot save a page that loads this library at its own top level; the page 500s first, and the guard is inert. Putting the load in a partial that is reached ONLY through an `{% templatetag openblock %} include {% templatetag closeblock %}` inside an `{% templatetag openblock %} if {% templatetag closeblock %}` makes the degradation real, because a partial that is never included is never compiled. THIS IS THE FLEET'S SHAPE, NOT A LOCAL INVENTION. scitex-writer carries the same partial for the same measured reason (its `views._project_picker_available`, whose docstring names the hard TemplateSyntaxError verbatim), and the SDK ships `scitex_project_picker` as part of its UI component. NO CARDS CHROME AROUND THE OUTPUT (operator 2026-10-20: shared components from scitex-sdk, including the project selector). The tag's own `[data-stx-project-picker]` root goes straight into the caller's mount — `app_header.js` moves it into the SDK header's canonical slot. There used to be a cards-owned wrapper div here; it forked the SDK's slot styling and is gone. The caller passes the project to mark as current, and gates the include on the availability flag that suits its context — `host_picker_available` on the project board, `cards_project_picker_available` in the shared header: {% templatetag openblock %} include "scitex_cards/_project_picker.html" with current=board.project {% templatetag closeblock %} `picker_scope` is optional: when absent the canonical tag reads `app_scope` and defaults to user. Only the distinct project-board caller explicitly requests project scope. Shared headers must not override a user-scoped app. The SDK's own tag decides whether the scope, viewer and host provider permit a picker. Including this partial adds no second selector and no standalone behaviour of its own. {% endcomment %}{% comment %} allow_user_scope=True is the whole reason a USER-scoped leaf (board, DM) can carry the canonical picker: without it the SDK tag renders nothing unless the app is project-scoped (measured 2026-10-22 — the header slot was empty on every page despite a registered host provider, because the scope gate fires before any provider is consulted). The project board passes scope="project" and is unaffected by the flag. Card cards-dm-spaces-crud-hide-20261022. {% endcomment %}{% if picker_scope %} {% scitex_project_picker scope=picker_scope current=current allow_user_scope=True as project_picker_markup %} {% else %} {% scitex_project_picker current=current allow_user_scope=True as project_picker_markup %} {% endif %} {% if project_picker_markup %} {{ project_picker_markup }} {% endif %}