toga-ai 1.0.585 → 1.0.586

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ client: shared
7
7
  type: feature
8
8
  status: active
9
9
  updated: 2026-08-14
10
- owners: [kyalamarthi]
10
+ owners: [kyalamarthi, jcardinal]
11
11
  files:
12
12
  - tools/assets/clickup/sprint-dashboard.html
13
13
  - tools/mvc/clickup/react/get.php
@@ -168,12 +168,22 @@ stays on the **base** hue, so the dashboard underneath stays readable instead of
168
168
  bright layer is written `var(--alert-bright, var(--alert-color))` so it **degrades to the base
169
169
  colour** if the property never reaches the element.
170
170
 
171
- Standing and blinking differ only in intensity, which is what keeps "steady = still broken"
172
- distinguishable from "pulsing = something just changed":
171
+ Standing and blinking differ in intensity **and in animation tempo**, which is what keeps
172
+ "still broken" distinguishable from "something just changed":
173
173
 
174
- - `.alert-flash` (standing) — 12px rim, `opacity: .85`, no animation. It may sit on screen for
175
- hours.
176
- - `.alert-flash.is-blinking` (event) — 20px rim, `opacity: 1`, plus the 0.7s pulse.
174
+ - `.alert-flash` (standing) — 12px rim, **slowly breathes** its opacity 0 → 1 → 0 on a
175
+ **7-second ease-in-out loop** (`@keyframes alert-breathe { 0%,100% { opacity: 0 } 50% {
176
+ opacity: 1 } }`, applied `animation: alert-breathe 7s ease-in-out infinite`). It may sit on
177
+ screen for hours, so the gentle 7s breathe draws a distant eye without reading as urgent. The
178
+ tempo is deliberately slow: the values were tuned with the developer (0.5→0.92 over 10s was
179
+ too subtle, full 0→1 over 10s too slow) to settle on full 0→1 over 7s.
180
+ - `.alert-flash.is-blinking` (event) — 20px rim, `opacity: 1`, plus the fast **0.7s** pulse.
181
+ Its compound selector (0,2,0) out-specifies the standing breathe (0,1,0), so a just-changed
182
+ monitor shows the urgent fast blink, not the slow breathe.
183
+
184
+ The base `.alert-flash { opacity: .85 }` is the **reduced-motion fallback**, not the animated
185
+ default — see the `prefers-reduced-motion` gotcha. It is deliberately non-zero so a
186
+ reduced-motion viewer never lands on a fully-invisible (opacity 0) glow.
177
187
 
178
188
  ## Gotchas
179
189
 
@@ -192,7 +202,9 @@ distinguishable from "pulsing = something just changed":
192
202
  Once the blink moved to `.alert-flash.is-blinking` (specificity 0,2,0), a reduced-motion rule
193
203
  on `.alert-flash` alone (0,1,0) **could no longer override it** and the screen kept pulsing.
194
204
  The rule must list both: `.alert-flash, .alert-flash.is-blinking { animation: none; }`. Any
195
- future state/modifier CSS split has the same trap.
205
+ future state/modifier CSS split has the same trap. Because it already names `.alert-flash`,
206
+ this same rule **also covers the new slow `alert-breathe` breathe** — a reduced-motion viewer
207
+ falls back to the static `opacity: .85` glow with **no separate rule needed**.
196
208
  - **A parse failure currently looks calmer than an outage** (known issue, not fixed). If the
197
209
  OneUptime call returns HTTP 200 with a malformed or empty body, `buildMonitorModel` yields
198
210
  total 0, empty buckets and empty rows. The status pill correctly degrades to "Unknown", but
@@ -219,6 +231,13 @@ summary, and caches ~5s. Rationale:
219
231
  alerting really wants (today the baseline resets every time a tab reloads).
220
232
 
221
233
  ## Change history
234
+ - 2026-08-14 — The standing (level-triggered) edge tint now **slowly breathes** its opacity
235
+ 0→1→0 on a 7s ease-in-out loop (`@keyframes alert-breathe`) instead of holding a static tint,
236
+ so a still-broken screen draws a distant eye. The fast 0.7s `.is-blinking` event pulse still
237
+ out-specifies it, keeping "just changed" (fast) distinct from "still broken" (slow breathe);
238
+ tempo tuned with the developer (0.5→0.92/10s too subtle, 0→1/10s too slow → 0→1/7s). The
239
+ existing `prefers-reduced-motion` compound-selector rule already covers the new animation, so
240
+ reduced-motion falls back to the deliberately non-zero static `opacity: .85` glow. (jcardinal)
222
241
  - 2026-08-14 — Built the monitor status column on `/clickup/react` (split layout, solid status
223
242
  circle + legend + degraded/offline card) as components in the same document rather than a
224
243
  nested iframe, sharing one 5s poll; documented the OneUptime public status-page overview API
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.585",
3
+ "version": "1.0.586",
4
4
  "description": "TOGA Technology Team Claude Knowledge System — shared AI coding harness with skills, knowledge base CLI, and project installer for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",