instar 1.3.788 → 1.3.789
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.
package/dashboard/index.html
CHANGED
|
@@ -562,7 +562,17 @@
|
|
|
562
562
|
/* F3 — Dashboard UX Standard: every tab's plain-language purpose line.
|
|
563
563
|
One muted, readable sentence directly under the tab header telling a
|
|
564
564
|
non-expert what the tab is for and what they can do here. Enforced by
|
|
565
|
-
tests/unit/dashboard-tab-purpose.test.ts.
|
|
565
|
+
tests/unit/dashboard-tab-purpose.test.ts.
|
|
566
|
+
|
|
567
|
+
F7 — CANONICAL purpose-line class. `.tab-purpose` is the shared vocabulary
|
|
568
|
+
every NEW tab should use for its purpose line. Three legacy variants still
|
|
569
|
+
exist and carry their own deliberately-distinct sizing — `.ph-intro`
|
|
570
|
+
(Process-Health design-system intro, larger), `.features-subtitle`, and
|
|
571
|
+
`.dropzone-subtitle` — all recognized by the F3 floor test. Per the spec
|
|
572
|
+
(docs/specs/dashboard-ux-standard.md, FD-3) F7 is soft-first: consolidating
|
|
573
|
+
those three into `.tab-purpose` is a tracked migration (it changes their
|
|
574
|
+
visual size, so it is done deliberately, not big-bang). Until then: reach
|
|
575
|
+
for `.tab-purpose`; do not add a fifth variant or an inline-styled line. */
|
|
566
576
|
.tab-purpose {
|
|
567
577
|
font-size: 13px;
|
|
568
578
|
color: var(--text-dim);
|
|
@@ -2950,7 +2960,7 @@
|
|
|
2950
2960
|
</div>
|
|
2951
2961
|
<div class="file-content-panel" id="fileContentPanel">
|
|
2952
2962
|
<div class="file-content-header" id="fileContentHeader" style="display:none">
|
|
2953
|
-
<button class="files-back-btn" onclick="filesGoBack()">←</button>
|
|
2963
|
+
<button class="files-back-btn" onclick="filesGoBack()" title="Back" aria-label="Back">←</button>
|
|
2954
2964
|
<div class="breadcrumbs" id="fileBreadcrumbs"></div>
|
|
2955
2965
|
<div class="file-badges" id="fileBadges"></div>
|
|
2956
2966
|
</div>
|
|
@@ -3229,7 +3239,7 @@
|
|
|
3229
3239
|
Multi-spec project plans. Each project groups related pieces of work and only advances to its next round once its required checks pass.
|
|
3230
3240
|
</div>
|
|
3231
3241
|
<div id="projectsEmpty" style="padding:40px;text-align:center;color:var(--text-dim);display:none">
|
|
3232
|
-
No active projects.
|
|
3242
|
+
No active projects yet. Ask your agent to start one from a plan document, and it'll appear here.
|
|
3233
3243
|
</div>
|
|
3234
3244
|
<div id="projectsList" style="display:flex;flex-direction:column;gap:12px"></div>
|
|
3235
3245
|
</div>
|
|
@@ -3260,7 +3270,7 @@
|
|
|
3260
3270
|
</div>
|
|
3261
3271
|
<div id="initiativesDigest" style="display:none;padding:12px;border:1px solid var(--border);border-radius:6px;background:var(--bg-dim)"></div>
|
|
3262
3272
|
<div id="initiativesEmpty" style="padding:40px;text-align:center;color:var(--text-dim);display:none">
|
|
3263
|
-
No initiatives to
|
|
3273
|
+
No initiatives yet. Ask your agent to create one, and it'll appear here.
|
|
3264
3274
|
</div>
|
|
3265
3275
|
<div id="initiativesList" style="display:flex;flex-direction:column;gap:12px"></div>
|
|
3266
3276
|
</div>
|
|
@@ -3945,7 +3955,7 @@
|
|
|
3945
3955
|
<!-- WhatsApp QR panel (hidden by default) -->
|
|
3946
3956
|
<div class="wa-qr-backdrop" id="waQrBackdrop" style="display:none" onclick="closeQrPanel()"></div>
|
|
3947
3957
|
<div class="wa-qr-panel" id="waQrPanel" style="display:none">
|
|
3948
|
-
<button class="wa-close" onclick="closeQrPanel()">×</button>
|
|
3958
|
+
<button class="wa-close" onclick="closeQrPanel()" title="Close" aria-label="Close">×</button>
|
|
3949
3959
|
<h3>WhatsApp Connection</h3>
|
|
3950
3960
|
<p id="waQrMsg">Scan this QR code with WhatsApp to connect</p>
|
|
3951
3961
|
<div id="waQrContainer"></div>
|
|
@@ -7649,7 +7659,7 @@
|
|
|
7649
7659
|
|
|
7650
7660
|
detail.innerHTML = '<div class="job-detail-header">'
|
|
7651
7661
|
+ '<div>'
|
|
7652
|
-
+ '<button class="back-btn" onclick="jobsGoBack()" style="display:none;margin-right:8px">←</button>'
|
|
7662
|
+
+ '<button class="back-btn" onclick="jobsGoBack()" style="display:none;margin-right:8px" title="Back" aria-label="Back">←</button>'
|
|
7653
7663
|
+ '<h3>' + esc(displayName) + '</h3>'
|
|
7654
7664
|
+ '<div class="job-desc">' + esc(job.description || '') + '</div>'
|
|
7655
7665
|
+ '</div>'
|
|
@@ -9420,7 +9430,7 @@
|
|
|
9420
9430
|
try {
|
|
9421
9431
|
const data = await apiFetch(info.endpoint);
|
|
9422
9432
|
panel.innerHTML = '<div class="cap-content-panel">' +
|
|
9423
|
-
'<div class="cap-content-header"><span>' + esc(info.label) + '</span><button onclick="document.getElementById(\'capContentBrowser\').innerHTML=\'\'" style="border:none;background:none;color:var(--text-dim);cursor:pointer;font-size:14px">×</button></div>' +
|
|
9433
|
+
'<div class="cap-content-header"><span>' + esc(info.label) + '</span><button onclick="document.getElementById(\'capContentBrowser\').innerHTML=\'\'" style="border:none;background:none;color:var(--text-dim);cursor:pointer;font-size:14px" title="Close" aria-label="Close">×</button></div>' +
|
|
9424
9434
|
'<div class="cap-content-body">' + renderBrowsableContent(info.renderer, data) + '</div></div>';
|
|
9425
9435
|
} catch (e) {
|
|
9426
9436
|
panel.innerHTML = '<div style="padding:12px;color:var(--red);font-size:12px">Failed to load: ' + esc(e.message) + '</div>';
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-09T07:11:33.686Z",
|
|
5
|
+
"instarVersion": "1.3.789",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
- **Every dashboard control is now labeled (Dashboard UX Standard F5).** Four icon-only buttons
|
|
9
|
+
(the Files back arrow, the QR-panel close, the Jobs back arrow, and the capability-content
|
|
10
|
+
close) shipped as a bare `←` / `×` glyph with no accessible name — a user (or screen reader)
|
|
11
|
+
had to guess. Each now carries a `title` + `aria-label`. A build-time floor
|
|
12
|
+
(`dashboard-controls-labeled.test.ts`) fails if any future button ships icon-only.
|
|
13
|
+
- **Empty states speak plain language, not API jargon (F6).** Two empty states told the operator
|
|
14
|
+
to "Create one via `POST /projects`" / "`POST /initiatives`" — meaningless to the person
|
|
15
|
+
reading the dashboard. They now say "Ask your agent to start one … and it'll appear here." A
|
|
16
|
+
floor (`dashboard-empty-states.test.ts`) fails on a bare or jargon-leaking empty state.
|
|
17
|
+
- **Shared purpose-line vocabulary documented (F7, soft-first).** `.tab-purpose` is marked the
|
|
18
|
+
canonical purpose-line class; the three legacy variants (`ph-intro`, `features-subtitle`,
|
|
19
|
+
`dropzone-subtitle`) are documented for a tracked, deliberate migration (per spec FD-3, not a
|
|
20
|
+
big-bang restyle).
|
|
21
|
+
- **Broken-asset floor (F8).** `dashboard-assets-resolve.test.ts` fails if a referenced local
|
|
22
|
+
image/icon has no file on disk.
|
|
23
|
+
|
|
24
|
+
## What to Tell Your User
|
|
25
|
+
|
|
26
|
+
A few more dashboard papercuts are gone: every button now has a readable label (better for
|
|
27
|
+
accessibility too), and the "nothing here yet" messages tell you what to do in plain English
|
|
28
|
+
instead of showing a developer command. Nothing to enable — it lands with the release.
|
|
29
|
+
|
|
30
|
+
## Summary of New Capabilities
|
|
31
|
+
|
|
32
|
+
- None — UX polish plus three build-time floors (F5 control labeling, F6 empty-state clarity,
|
|
33
|
+
F8 asset resolution) that fail the build if a future change regresses them.
|
|
34
|
+
|
|
35
|
+
## Evidence
|
|
36
|
+
|
|
37
|
+
`tests/unit/dashboard-controls-labeled.test.ts` (F5): scans every `<button>` in
|
|
38
|
+
`dashboard/index.html`, asserts each has visible text, `title`, or `aria-label` (population floor
|
|
39
|
+
≥30). `tests/unit/dashboard-empty-states.test.ts` (F6): audits the `*Empty*` resting-state
|
|
40
|
+
containers (population floor ≥6) for a real sentence and no `POST /…`/curl jargon.
|
|
41
|
+
`tests/unit/dashboard-assets-resolve.test.ts` (F8): every static local `src`/`url(...)` ref
|
|
42
|
+
resolves to a real file (logo.png confirmed present). All 7 dashboard floor tests green (13
|
|
43
|
+
cases, 1 browser-gated skip). Display-only markup + build-time floors — no runtime surface;
|
|
44
|
+
machine-local static asset; rollback is a plain revert.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Side-effects review — Dashboard UX Standard floors F5–F8
|
|
2
|
+
|
|
3
|
+
**Change:** `dashboard/index.html` (F5 button labels, F6 empty-state de-jargoning, F7 canonical-class doc) + three static floor tests (`dashboard-controls-labeled` F5, `dashboard-empty-states` F6, `dashboard-assets-resolve` F8). Spec: `docs/specs/dashboard-ux-standard.md` (converged + approved, shipped in #1404). Tier 1 — display-only markup + build-time CI floors; no runtime `src/` change, no decision logic.
|
|
4
|
+
|
|
5
|
+
## Phase 1 — Principle check (signal vs authority)
|
|
6
|
+
Does this touch a decision point that gates information flow / blocks actions / constrains agent behavior? **No.** The changes are (a) HTML label/text attributes rendered to the operator and (b) static test files that fail a *build* if the dashboard regresses. The tests are build-time CI floors, not runtime authorities — they never gate a message, session, or agent action. Signal-vs-authority does not apply (no runtime decision surface).
|
|
7
|
+
|
|
8
|
+
## Phase 4 — Side-effects review
|
|
9
|
+
1. **Over-block:** the floor tests could reject legitimate markup. F5 accepts a button labeled by visible text OR `title` OR `aria-label` OR dynamic (`${…}`/concatenated) content — the full current button population passes; a button labeled *only* by an adjacent element (not itself) would false-flag, acceptable because self-labeling is the accessibility norm and easily satisfied. F6 requires a ≥4-word sentence in each `*Empty*` container — a legitimately terse state would flag, but the 4-word floor is lenient. F8 excludes `data:`/`http(s)`/dynamic `${}` srcs, so only real static local refs are checked. No legitimate current markup is rejected (all 7 dashboard tests green).
|
|
10
|
+
2. **Under-block:** F5 checks `<button>` only, not `<select>`/`<input>` labeling (a tracked F5 follow-up <!-- tracked: topic-29723 -->). F6 audits `*Empty*`-id containers, not every conceivable resting state. F8 checks static local refs only. These are honest partial floors that raise the bar without claiming totality — not regressions.
|
|
11
|
+
3. **Level-of-abstraction fit:** correct layer. A UI-consistency standard is enforced at build time over the shipped markup; there is no smarter runtime gate this should feed (it is not a runtime concern). It extends the existing dashboard-floor test family (`dashboard-tab-purpose`, `dashboard-panel-placement`, `dashboard-nav-reachability`, `dashboard-viewport-scroll`) — same pattern, same layer.
|
|
12
|
+
4. **Signal vs authority compliance:** compliant by absence — no blocking authority added (build-time test, not runtime gate). See Phase 1.
|
|
13
|
+
5. **Interactions:** the new F5/F6/F8 tests are independent scans over `index.html`; none shadows another. The F7 change is a CSS *comment* only — it does not alter the `.tab-purpose` rule and the F3 `dashboard-tab-purpose` test (which recognizes all four purpose-line classes) still passes. No double-fire, no race with cleanup.
|
|
14
|
+
6. **External surfaces:** changes the dashboard HTML the operator sees — 4 icon buttons gain accessible names, 2 empty states lose API jargon ("POST /projects" → plain language). Strictly additive/clarifying; no behavior, endpoint, or data change. No surface visible to other agents/users/systems. No timing/conversation-state dependency.
|
|
15
|
+
7. **Multi-machine posture:** **machine-local BY DESIGN** — `dashboard/index.html` is a static asset shipped in the package and served by each machine's own server; every machine serves the identical shipped file, so there is nothing to replicate, proxy, or transfer. No durable state, no generated URL, no user-facing notice. A single-machine assumption is correct here, not a defect.
|
|
16
|
+
8. **Rollback cost:** trivial — `git revert` the commit. Display-only markup + additive tests; no migration, no agent-state repair, no data change.
|
|
17
|
+
|
|
18
|
+
## Phase 4.5 — No deferrals
|
|
19
|
+
The two under-block follow-ups (F5 select/input labeling; broader F6 coverage) are tracked <!-- tracked: topic-29723 -->. F7 hard-consolidation is deliberately soft-first per the spec's FD-3, not an orphan deferral. No partial fix of an in-scope item is shipped.
|
|
20
|
+
|
|
21
|
+
## Phase 5 — Second pass
|
|
22
|
+
Not required: no block/allow, session-lifecycle, coherence, or sentinel/guard/gate/watchdog surface (Tier 1, display-only).
|