chore(frontend): scrub pre-existing issue-tag refs from source comments

The no-issue-tags-in-code rule (knowledge/hive-rules.md) was enforced on
recent PRs but several pre-existing parenthetical refs remained in the
frontend source. Replace them with plain prose — issue numbers are opaque
in source, and prose survives repo migrations + doesn't confuse static
analysis. Comment-only; no behaviour change.

- tabs.js: 4× operator-inbox refs → prose
- flow.js / flow.css: agent-filter + sent/delivered-collapse refs → prose
- home.js / home.css: H0M3 page-script + page-chrome refs → prose
- dashboard.html: 1NB0X inbox ref → prose

Closes #1549.
This commit is contained in:
iris 2026-06-09 00:24:49 +02:00
commit 2db94a920a
6 changed files with 12 additions and 12 deletions

View file

@ -118,7 +118,7 @@
can decide without leaving the pane. --> can decide without leaving the pane. -->
<section class="tab-pane" id="tab-pane-call" data-tab-pane="call" hidden <section class="tab-pane" id="tab-pane-call" data-tab-pane="call" hidden
role="tabpanel" aria-labelledby="tab-call"> role="tabpanel" aria-labelledby="tab-call">
<!-- 1NB0X: unread agent→operator messages (#1469). Fetched on <!-- 1NB0X: unread agent→operator messages. Fetched on
tab activation + cold load, appended live from the broker tab activation + cold load, appended live from the broker
stream, cleared via "mark all read". Count folds into the stream, cleared via "mark all read". Count folds into the
Y3R C4LL pill so messages aren't missed. --> Y3R C4LL pill so messages aren't missed. -->

View file

@ -88,7 +88,7 @@ body.flow-shell .flow-main-slim {
padding: 0.4em 1em; padding: 0.4em 1em;
} }
/* Agent filter (#1473): a select in the FL0W header narrows the /* Agent filter: a select in the FL0W header narrows the
timeline to messages involving one agent. Non-matching rows get timeline to messages involving one agent. Non-matching rows get
`.flow-hidden`; the select reuses the journal-unit control look. */ `.flow-hidden`; the select reuses the journal-unit control look. */
.flow-filter { .flow-filter {

View file

@ -36,7 +36,7 @@ import {
populateAgentFilter(); populateAgentFilter();
}).catch(() => { /* graceful: compose just shows `*` and nothing else */ }); }).catch(() => { /* graceful: compose just shows `*` and nothing else */ });
// ─── agent filter (#1473) ─────────────────────────────────────────────── // ─── agent filter ───────────────────────────────────────────────
// A select in the FL0W header narrows the timeline to messages involving // A select in the FL0W header narrows the timeline to messages involving
// one agent (matched on `from` OR `to`). Each rendered row carries // one agent (matched on `from` OR `to`). Each rendered row carries
// `data-from` / `data-to`; non-matching rows get `.flow-hidden`. New rows // `data-from` / `data-to`; non-matching rows get `.flow-hidden`. New rows
@ -158,7 +158,7 @@ import {
} else { } else {
row.append(ts, ' ', arrow, ' ', from, ' ', sep, ' ', to, ' ', body); row.append(ts, ' ', arrow, ' ', from, ' ', sep, ' ', to, ' ', body);
} }
// Tag with the participants so the agent filter (#1473) can match // Tag with the participants so the agent filter can match
// on `from`/`to`, and hide the row up-front if a filter is active. // on `from`/`to`, and hide the row up-front if a filter is active.
row.dataset.from = ev.from; row.dataset.from = ev.from;
row.dataset.to = ev.to; row.dataset.to = ev.to;
@ -168,7 +168,7 @@ import {
return row; return row;
} }
// Sent→Delivered collapse (#1472). When a message directly wakes its // Sent→Delivered collapse. When a message directly wakes its
// recipient the broker emits `sent` then `delivered` for the same row // recipient the broker emits `sent` then `delivered` for the same row
// id back-to-back, rendering two near-identical lines. We track each // id back-to-back, rendering two near-identical lines. We track each
// recent `sent` row and, when its `delivered` lands within // recent `sent` row and, when its `delivered` lands within

View file

@ -1,7 +1,7 @@
/* H0M3 the menu-hub page (#1464). Minimal portal styling: a banner /* H0M3 the menu-hub page. Minimal portal styling: a banner
+ a responsive grid of link tiles. Colours come from theme.css (the + a responsive grid of link tiles. Colours come from theme.css (the
shared palette); base typography from common.css. When the shared shared palette); base typography from common.css. When the shared
page-chrome component lands (#1464 phase 2 / #1451) the banner + tile page-chrome component lands (a later refactor step) the banner + tile
styling can fold into it. */ styling can fold into it. */
body.home-shell { body.home-shell {

View file

@ -1,4 +1,4 @@
// H0M3 page script (#1464). The page is static markup; this only does // H0M3 page script. The page is static markup; this only does
// a few small things off a single `/api/state` read: // a few small things off a single `/api/state` read:
// 1. reveal the Matrix tile when the matrix GUI is enabled (same // 1. reveal the Matrix tile when the matrix GUI is enabled (same
// gating as the dashboard's M4TR1X tab — no dead link otherwise); // gating as the dashboard's M4TR1X tab — no dead link otherwise);

View file

@ -3975,7 +3975,7 @@ window.marked = marked;
} }
} }
refreshState(); refreshState();
// Cold-load the operator inbox (#1469) so the Y3R C4LL pill + browser // Cold-load the operator inbox so the Y3R C4LL pill + browser
// title reflect unread agent→operator messages immediately, before the // title reflect unread agent→operator messages immediately, before the
// operator opens the tab. Live updates arrive via the broker stream. // operator opens the tab. Live updates arrive via the broker stream.
refreshOperatorInbox(); refreshOperatorInbox();
@ -4030,7 +4030,7 @@ window.marked = marked;
let ev; let ev;
try { ev = JSON.parse(e.data); } catch { return; } try { ev = JSON.parse(e.data); } catch { return; }
// Broker `sent` frames aren't mutation events, but the operator // Broker `sent` frames aren't mutation events, but the operator
// inbox (#1469) cares about ones addressed to "operator". // inbox cares about ones addressed to "operator".
if (ev.kind === 'sent' && ev.to === 'operator') { if (ev.kind === 'sent' && ev.to === 'operator') {
operatorInboxAppendFromEvent(ev); operatorInboxAppendFromEvent(ev);
return; return;
@ -4201,7 +4201,7 @@ window.marked = marked;
// stores so SSE-driven updates flow through without extra plumbing. // stores so SSE-driven updates flow through without extra plumbing.
// Set `hidden` when the count is zero so the pill doesn't draw // Set `hidden` when the count is zero so the pill doesn't draw
// attention to an empty room. // attention to an empty room.
// ─── operator inbox (#1469) — unread agent→operator messages ──────────── // ─── operator inbox — unread agent→operator messages ────────────
// The Y3R C4LL tab surfaces messages agents `send(to: "operator")` so // The Y3R C4LL tab surfaces messages agents `send(to: "operator")` so
// the operator stops missing them. Unread = broker rows to "operator" // the operator stops missing them. Unread = broker rows to "operator"
// with `acked_at IS NULL`; cold-loaded from `/api/operator-inbox`, // with `acked_at IS NULL`; cold-loaded from `/api/operator-inbox`,
@ -4285,7 +4285,7 @@ window.marked = marked;
} }
setTabCount('swarm', swarm); setTabCount('swarm', swarm);
// Y3R C4LL — pending approvals + operator-targeted questions + // Y3R C4LL — pending approvals + operator-targeted questions +
// unread agent→operator messages (#1469). // unread agent→operator messages.
const callCount = const callCount =
(approvalsState?.pending?.length ?? 0) + (approvalsState?.pending?.length ?? 0) +
(questionsState?.pending?.length ?? 0) + (questionsState?.pending?.length ?? 0) +