{# Work — one screen, five tabs (043 §5, phase 3; Goals 2026-10-27). The five tabs show live work, the goal board, schedules, apps/artifacts, and classified activity. The tabs are panes in this one page, not five routes: work-now.js reveals the pane whose `data-pane` matches the active tab and hides the rest, so /work answers with the whole screen and the switch is client-side. Every word comes from webview/copy/en.py — no inline script on any 043 template (tests/unit/webview/test_no_new_inline_script.py): the words ride on the #work-now-copy / #worklog-copy data attributes and the modules read them off `dataset`. #} {% extends "shell.html" %} {% block body %}

{{ t('work.title') }}

{{ t('work.sub') }}

{# Now & next — running goals + background helpers, and what is queued. Drawn by work-now.js from /api/webgate/goals + /api/webgate/running. #}

{{ t('work.now.section_now') }}

{{ t('work.now.section_next') }}

{# Goals — the goal board (2026-10-27): one lane per live status in core.goal_vocab.LIVE_STATUS_ORDER, the open decisions first, the finished goals folded away. Drawn by work-goals.js from /api/webgate/goals/board; a card opens #goal-detail from /api/webgate/goals/{id}/detail. Every action is an existing verb. #} {# Scheduled jobs — listed with Pause / Resume / Run now / Stop. Drawn by work-now.js from /api/webgate/cron; each posts /api/webgate/cron/{id}/{verb}. #} {# Apps — everything Rob built you can open, in three tiers by reach. Drawn by work-apps.js from /api/webgate/apps + /api/webgate/artifacts. #} {# Log — the classified activity stream, drawn by worklog.js. #}
{# The goal detail (Work › Goals). A native , as the Chats overlay is: the platform brings the focus trap, the backdrop and Escape. #}

{# The words work-goals.js renders. Shared verbs reuse the Now & next keys, so a button reads the same on both tabs. #} {# The words the Log stream is read into (unchanged). data-classes is core.activity_class.CLIENT_CLASSES, server-rendered so the chips can never drift from the classifier. #} {# The words work-now.js renders itself. read_only rides here so the module draws no Stop / Pause / Cancel it cannot act on (the shell states the posture once, so the buttons are simply absent). #} {# The words work-apps.js renders (WS-P2). Its own copy node, since it is its own module; the tab switch is still work-now.js's (one Work subnav). #} {% endblock %}