gh-glance 0.7.0 → 0.9.1
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/CHANGELOG.md +95 -1
- package/README.md +97 -47
- package/index.mjs +1069 -185
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,97 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.1] - 2026-08-11
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Package-boundary verification supports npm 12.** The release test accepts
|
|
15
|
+
both npm 11's array-shaped `npm pack --json` result and npm 12's
|
|
16
|
+
package-name-keyed result, so the existing OIDC publication workflow can
|
|
17
|
+
verify the CLI-only package boundary before publishing.
|
|
18
|
+
|
|
19
|
+
## [0.9.0] - 2026-08-11
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **Security keeps a bounded priority view when newest pages fill.** Dependabot
|
|
24
|
+
and code-scanning sources add critical/high lanes only when their newest 100
|
|
25
|
+
open alerts fill the base page, then merge and de-duplicate the result. A `+`
|
|
26
|
+
marker stays explicit when any lane fills; the app never claims an unbounded
|
|
27
|
+
repository is complete.
|
|
28
|
+
- **Adaptive polling now protects both GitHub budgets.** REST and GraphQL spend
|
|
29
|
+
are measured separately, including failed calls, and the safer interval wins
|
|
30
|
+
without lowering the configured refresh floor. `--doctor` reports the same
|
|
31
|
+
conservative model.
|
|
32
|
+
- **Terminal state has explicit non-colour and linear-rendering channels.** A
|
|
33
|
+
stable ASCII `x` marks fetch failure, selected rows include `selected` in
|
|
34
|
+
their accessibility label, narrow errors begin with the recovery action, and
|
|
35
|
+
short help always retains Quit, Refresh, and the full-help command.
|
|
36
|
+
- **PTY child-process coverage is available as an informational signal.**
|
|
37
|
+
`npm run test:coverage:runtime` summarizes observed `index.mjs` functions on
|
|
38
|
+
scheduled/manual coverage runs without adding a threshold or release gate.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- **Dashboard recovery state is account-scoped and safe across panes.** Cache
|
|
43
|
+
version 2 includes `GH_CONFIG_DIR`/`hosts.yml` identity and one-way digests of
|
|
44
|
+
supported token variables, rejects the old unscoped cache, and uses bounded
|
|
45
|
+
locked three-way merges so simultaneous panes preserve unrelated targets,
|
|
46
|
+
tabs, and width choices. Successful quiet polls checkpoint freshness on a
|
|
47
|
+
bounded cadence.
|
|
48
|
+
- **Settled automatic polling is visually quiet.** `Fetching` is reserved for
|
|
49
|
+
startup/manual work, unchanged Security observations slow to a 60-second
|
|
50
|
+
cadence, and cache-hydrated tabs clear their initial loading state.
|
|
51
|
+
- **Mouse reporting is opt-in through Width mode.** Press `w` before dragging a
|
|
52
|
+
header divider; outside that mode the terminal keeps ordinary mouse behavior.
|
|
53
|
+
- **The npm package is explicitly CLI-only.** The executable remains supported,
|
|
54
|
+
while package-root and deep JavaScript imports now fail through `exports: {}`.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- **Manual Security refresh now clears every source backoff after the in-flight
|
|
59
|
+
guard admits the request.** Re-authenticating and pressing `r` cannot leave a
|
|
60
|
+
previously failed source silently asleep.
|
|
61
|
+
- **Concurrent persistence no longer loses a later update.** Same-target tabs
|
|
62
|
+
merge independently, and both cache and width writers adopt the merged disk
|
|
63
|
+
snapshot before their next save.
|
|
64
|
+
- **Selections stay attached to visible items as lists change.** Insertions
|
|
65
|
+
above a row reconcile the viewport without opening a different item; a missing
|
|
66
|
+
item clears selection instead of selecting a replacement.
|
|
67
|
+
- **Quitting aborts in-flight `gh ... view --web` children.** The app no longer
|
|
68
|
+
waits for a stalled browser-open command after terminal teardown begins.
|
|
69
|
+
- **Row failures reset only when row content changes.** Unchanged parent renders
|
|
70
|
+
no longer clear an error boundary, while corrected data can recover in place.
|
|
71
|
+
- **Status hints now describe only controls that can act.** Empty lists do not
|
|
72
|
+
advertise movement or opening, compact layouts do not advertise width mode,
|
|
73
|
+
and Security does not advertise an unsupported open action.
|
|
74
|
+
|
|
75
|
+
## [0.8.0] - 2026-08-11
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
|
|
79
|
+
- **Last-known-good dashboard rows now survive process restarts.** Successfully
|
|
80
|
+
parsed Actions, Issues, Pull Requests, and Security state is stored in a
|
|
81
|
+
private, target-scoped cache. It retains five recent targets and 60 rows per
|
|
82
|
+
tab, ignores corrupt or unwritable state, and never stores credentials.
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
|
|
86
|
+
- **Development tooling was refreshed.** The paired CodeQL actions now use
|
|
87
|
+
4.37.6, and the development-only `globals` lock entry is 17.9.0.
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
|
|
91
|
+
- **Status updates no longer accumulate old footer lines during prolonged rate
|
|
92
|
+
limiting.** The dashboard leaves the terminal's physical bottom row as a
|
|
93
|
+
scroll guard while preserving incremental rendering.
|
|
94
|
+
- **Restarting during a live rate limit no longer shows an empty dashboard.**
|
|
95
|
+
Cached rows remain visible below the current error with an explicit `stale`
|
|
96
|
+
age, while repository targets remain isolated.
|
|
97
|
+
- **Blind Security refreshes preserve known alerts.** A failed observation
|
|
98
|
+
cannot replace last-known-good Security rows with a false empty result, and an
|
|
99
|
+
identical healthy response clears the warning after recovery.
|
|
100
|
+
|
|
10
101
|
## [0.7.0] - 2026-08-10
|
|
11
102
|
|
|
12
103
|
### Added
|
|
@@ -621,7 +712,10 @@ engineering, security, QA and UX. What follows is what changed as a result.
|
|
|
621
712
|
- The `main` field from `package.json`. It advertised the file as importable,
|
|
622
713
|
but importing it took over the terminal or exited the host process.
|
|
623
714
|
|
|
624
|
-
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.
|
|
715
|
+
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.9.1...HEAD
|
|
716
|
+
[0.9.1]: https://github.com/juan294/gh-glance/compare/v0.9.0...v0.9.1
|
|
717
|
+
[0.9.0]: https://github.com/juan294/gh-glance/compare/v0.8.0...v0.9.0
|
|
718
|
+
[0.8.0]: https://github.com/juan294/gh-glance/compare/v0.7.0...v0.8.0
|
|
625
719
|
[0.7.0]: https://github.com/juan294/gh-glance/compare/v0.6.1...v0.7.0
|
|
626
720
|
[0.6.1]: https://github.com/juan294/gh-glance/releases/tag/v0.6.1
|
|
627
721
|
[0.6.0]: https://github.com/juan294/gh-glance/releases/tag/v0.6.0
|
package/README.md
CHANGED
|
@@ -30,19 +30,20 @@ without switching to the browser.
|
|
|
30
30
|
│ │
|
|
31
31
|
│ │
|
|
32
32
|
╰───────────────────────────────────────────────────────────────── 4 of 4 ─╯
|
|
33
|
-
⣾ Fetching Move: ↑↓ | Open: Ent | Refresh: r | Width: w | Quit: q 0.
|
|
33
|
+
⣾ Fetching Move: ↑↓ | Open: Ent | Refresh: r | Width: w | Quit: q 0.9.1
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
> Captured from a real run at 76 columns with `GH_GLANCE_ICONS=unicode`, so the
|
|
37
37
|
> status icons render in a browser. With a Nerd Font (the default) they are
|
|
38
38
|
> Octicon glyphs instead.
|
|
39
39
|
>
|
|
40
|
-
> The `>` on the first row is the cursor.
|
|
40
|
+
> The `>` on the first row is the cursor. Four more markers appear when they
|
|
41
41
|
> apply: a `+` after a tab's count means the list was truncated by the fetch
|
|
42
42
|
> limit, a `!` after the Actions count means the newest run failed — so "is CI
|
|
43
|
-
> red" is answerable without switching to that tab —
|
|
44
|
-
>
|
|
45
|
-
> as there being nothing to
|
|
43
|
+
> red" is answerable without switching to that tab — an `x` means the tab's
|
|
44
|
+
> latest fetch failed, and a `?` in place of the Security count means its
|
|
45
|
+
> endpoints could not be read, which is not the same as there being nothing to
|
|
46
|
+
> report.
|
|
46
47
|
|
|
47
48
|
<!-- contract:allow-emoji -- the check/cross above stand in for Nerd Font
|
|
48
49
|
Octicons the app actually draws; they are literal examples, not decoration. -->
|
|
@@ -64,22 +65,23 @@ current.
|
|
|
64
65
|
- **Issues** -- open issues: title, author, first label, age
|
|
65
66
|
- **Pull Requests** -- open PRs: title, author, branch, review status
|
|
66
67
|
(approved / changes requested / pending), age
|
|
67
|
-
- **Security** -- open Dependabot
|
|
68
|
-
most severe first and with severity spelled out
|
|
69
|
-
by colour alone.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
- **Security** -- open Dependabot, code-scanning, and secret-scanning alerts,
|
|
69
|
+
sorted with the most severe first and with severity spelled out rather than
|
|
70
|
+
carried by colour alone. Each source starts with its newest 100 open alerts.
|
|
71
|
+
When that page is full, Dependabot and code scanning also fetch bounded
|
|
72
|
+
critical/high priority lanes before merging and de-duplicating the result.
|
|
73
|
+
The `+` marker means at least one bounded lane filled, so the visible priority
|
|
74
|
+
set may still be incomplete. Code and secret scanning require GitHub Advanced
|
|
75
|
+
Security -- see [Limitations](#limitations).
|
|
74
76
|
- Tab bar with live counts, pinned to the top of the pane above a divider,
|
|
75
77
|
switchable via `1`-`4`, arrow keys, or `Tab`/`Shift+Tab`
|
|
76
78
|
- Adjustable full-table columns, with visible header grips, a keyboard width
|
|
77
79
|
mode, and preferences kept separately for each tab
|
|
78
80
|
- `lazygit`-style panel frame: the tab name sits in the top border, the
|
|
79
81
|
visible-of-total row count in the bottom
|
|
80
|
-
- A `Fetching` indicator that brightens
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
- A `Fetching` indicator that brightens while a tab's first request is settling
|
|
83
|
+
or during a manual refresh. Settled automatic polls do not flash it; the
|
|
84
|
+
spinner still animates during first load or while a workflow run is executing
|
|
83
85
|
- Status icons are real GitHub Octicons (via the Nerd Font glyph set), not emoji
|
|
84
86
|
-- with a plain-ASCII fallback for terminals without one
|
|
85
87
|
- Readable without colour: severity has its own column, a failing newest run puts
|
|
@@ -90,10 +92,13 @@ current.
|
|
|
90
92
|
answers "is CI red" without colour
|
|
91
93
|
- Says when it is stale rather than showing old data silently, and marks a tab
|
|
92
94
|
whose last refresh failed
|
|
95
|
+
- Keeps the last successfully parsed rows visible during temporary failures and
|
|
96
|
+
across a restart, scoped to the repository being watched
|
|
93
97
|
- Adapts row count to the terminal pane's height live, on resize
|
|
94
98
|
- Enters the terminal's alternate screen buffer on launch (like `lazygit`,
|
|
95
99
|
`htop`, `vim`) so the shell prompt that launched it stays out of view, and
|
|
96
|
-
is restored cleanly on exit
|
|
100
|
+
is restored cleanly on exit without old status lines accumulating below the
|
|
101
|
+
frame
|
|
97
102
|
|
|
98
103
|
## Prerequisites
|
|
99
104
|
|
|
@@ -116,6 +121,10 @@ That is the whole install. `gh-glance` ships as a single `index.mjs` with no
|
|
|
116
121
|
build step, so there is nothing to compile and nothing to configure -- the
|
|
117
122
|
package is the source you can read in this repository.
|
|
118
123
|
|
|
124
|
+
The installed package is a CLI, not a JavaScript library. The `gh-glance`
|
|
125
|
+
executable is supported; package-root and deep imports are intentionally
|
|
126
|
+
blocked so an internal test seam cannot become an accidental public API.
|
|
127
|
+
|
|
119
128
|
Every published version is built and signed by GitHub Actions from a tagged
|
|
120
129
|
commit on `main`, never from a maintainer's laptop, and carries [npm
|
|
121
130
|
provenance](https://docs.npmjs.com/generating-provenance-statements) linking
|
|
@@ -260,14 +269,15 @@ line such as:
|
|
|
260
269
|
Width: BRANCH 14 Tab select <- -> resize r reset Esc done
|
|
261
270
|
```
|
|
262
271
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
272
|
+
After pressing `w`, you can also left-drag a visible `│` header grip. Mouse
|
|
273
|
+
reporting is enabled only while width mode owns the input, so a click outside
|
|
274
|
+
that mode does not enter it. Releasing the button, including outside the header,
|
|
275
|
+
ends the drag. Row clicking, hover behavior, and pointer-shape changes are not
|
|
276
|
+
supported.
|
|
268
277
|
|
|
269
|
-
While
|
|
270
|
-
terminal's mouse-reporting bypass modifier, commonly `Shift`.
|
|
278
|
+
While width mode is active, terminal-native text selection may require your
|
|
279
|
+
terminal's mouse-reporting bypass modifier, commonly `Shift`. Outside width
|
|
280
|
+
mode, gh-glance leaves mouse reporting disabled.
|
|
271
281
|
|
|
272
282
|
The cursor tracks the *item*, not the row position, so it stays on what you
|
|
273
283
|
selected as new rows arrive above it. `Enter` works on Actions, Issues and Pull
|
|
@@ -313,12 +323,13 @@ Environment variables work too, and the flags take precedence:
|
|
|
313
323
|
|---|---|
|
|
314
324
|
| `GH_REPO=owner/name` | Watch a specific repository instead of the current directory's. A host-qualified `GH_REPO` does **not** route the security-alert endpoints -- use `GH_HOST` or `--repo host/owner/name` for that |
|
|
315
325
|
| `GH_HOST=<host>` | Send every call to a GitHub Enterprise or EMU host instead of `github.com`. Routes both the list commands and the alert endpoints |
|
|
316
|
-
| `GH_TOKEN`, `GH_ENTERPRISE_TOKEN`, `
|
|
326
|
+
| `GH_TOKEN`, `GITHUB_TOKEN`, `GH_ENTERPRISE_TOKEN`, `GITHUB_ENTERPRISE_TOKEN` | Used by `gh`. gh-glance never logs or stores these values, but hashes each set value locally as part of the account-scoped cache namespace so panes with different credentials cannot hydrate each other's rows. The raw values are not written to disk. |
|
|
327
|
+
| `GH_CONFIG_DIR` | Selects `gh`'s account configuration and contributes its normalized identity to the cache namespace. Separate values can isolate simultaneous panes on different accounts; see [No account pinning](#limitations). |
|
|
317
328
|
| `GH_GLANCE_REFRESH=<seconds>` | Active-tab poll interval, 2-3600. Sets it once for every pane in a shell; `--refresh` takes precedence. This is a floor -- see [Rate limit](#rate-limit) |
|
|
318
329
|
| `GH_GLANCE_ICONS=unicode` | Plain ASCII status icons, for terminals without a Nerd Font |
|
|
319
330
|
| `GH_GLANCE_NO_ANIMATION=1` | Freeze the spinner — no motion at all |
|
|
320
331
|
| `NO_COLOR=1` | Disable colour. Status stays readable: severity has its own column, a failing newest run puts a `!` on the Actions tab, and the active tab is bracketed. Note that run-state glyphs are not all distinct -- see the feature list above |
|
|
321
|
-
| `INK_SCREEN_READER=true` | Switch the renderer to a linear, unthrottled mode.
|
|
332
|
+
| `INK_SCREEN_READER=true` | Switch the renderer to a linear, unthrottled mode. Automated PTY coverage checks that status and selection labels reach this Ink path, but it has not been validated with real assistive technology — treat it as automated rendering coverage, not claimed screen-reader support. |
|
|
322
333
|
|
|
323
334
|
### Saved column widths
|
|
324
335
|
|
|
@@ -344,6 +355,37 @@ the live session and width mode reports `Widths not saved`; a later successful
|
|
|
344
355
|
write clears the warning. The UI owns this file, so direct editing is not the
|
|
345
356
|
primary configuration workflow.
|
|
346
357
|
|
|
358
|
+
### Last-known-good dashboard cache
|
|
359
|
+
|
|
360
|
+
Successfully parsed dashboard rows are also saved automatically, in
|
|
361
|
+
`dashboard-cache.json` beside `preferences.json`:
|
|
362
|
+
|
|
363
|
+
```text
|
|
364
|
+
$XDG_CONFIG_HOME/gh-glance/dashboard-cache.json
|
|
365
|
+
~/Library/Application Support/gh-glance/dashboard-cache.json
|
|
366
|
+
~/.config/gh-glance/dashboard-cache.json
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
The cache is scoped to the repository, host, and effective `gh` account
|
|
370
|
+
namespace. In inferred mode, the host and current working directory also form
|
|
371
|
+
the identity, so rows from one checkout or credential context cannot appear in
|
|
372
|
+
another. The namespace uses `GH_CONFIG_DIR`/`hosts.yml` identity plus one-way
|
|
373
|
+
digests of supported token environment variables; raw credentials are never
|
|
374
|
+
stored. It retains at most five recent targets and 60 rows per tab; a shortened
|
|
375
|
+
cached tab keeps its `+` marker rather than presenting the saved count as exact.
|
|
376
|
+
|
|
377
|
+
Only successfully parsed, non-blind observations replace saved rows. A failed
|
|
378
|
+
request can add a live error or `?` marker, but it cannot turn known Security
|
|
379
|
+
alerts or other last-known-good rows into an empty result. Missing, corrupt,
|
|
380
|
+
unknown-version, or unwritable cache state is ignored rather than blocking the
|
|
381
|
+
dashboard. On POSIX systems, gh-glance restricts its config directory to `0700`
|
|
382
|
+
and the cache file to `0600`. The file contains repository data, including
|
|
383
|
+
titles, authors, branches, and Security findings, but never GitHub credentials.
|
|
384
|
+
Both persistence files use a bounded advisory lock before atomic replacement.
|
|
385
|
+
The cache merges independent targets and tabs, while preferences merge columns,
|
|
386
|
+
so simultaneous panes do not overwrite one another's unrelated state. It is
|
|
387
|
+
recovery state owned by the UI, not a configuration interface.
|
|
388
|
+
|
|
347
389
|
## GitHub Enterprise and EMU
|
|
348
390
|
|
|
349
391
|
**The common case needs no configuration.** Authenticate once --
|
|
@@ -387,9 +429,9 @@ Collects, in one plain-text block: the `gh-glance`, Node and `gh` versions;
|
|
|
387
429
|
which hosts `gh` is authenticated for; how the repository target resolved and
|
|
388
430
|
from where; your remaining REST and GraphQL budget plus what this configuration
|
|
389
431
|
will spend per hour; the relevant environment variables; a read-only
|
|
390
|
-
`Repository access` probe; and
|
|
391
|
-
argv it sent, its outcome, and how any
|
|
392
|
-
`rate-limited`, `auth-problem` or `other`).
|
|
432
|
+
`Repository access` probe; and each bounded dashboard probe, including the
|
|
433
|
+
Security priority lanes, with the exact argv it sent, its outcome, and how any
|
|
434
|
+
error was classified (`unavailable`, `rate-limited`, `auth-problem` or `other`).
|
|
393
435
|
|
|
394
436
|
The `Repository access` probe shows whether the target resolves for the active
|
|
395
437
|
`gh` credentials. A failed GitHub resolution response cannot distinguish a
|
|
@@ -424,17 +466,18 @@ through GraphQL instead — a separate 5,000/hour allowance. With the default
|
|
|
424
466
|
|
|
425
467
|
| Visible tab | REST / hour | GraphQL / hour |
|
|
426
468
|
|---|---|---|
|
|
427
|
-
| Actions | ~1,
|
|
428
|
-
| Issues or Pull Requests | ~
|
|
429
|
-
| Security | ~2,280 | ~240 |
|
|
430
|
-
|
|
431
|
-
Security is the most expensive
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
GitHub Enterprise tenant where the
|
|
469
|
+
| Actions | up to ~1,800 | ~240 |
|
|
470
|
+
| Issues or Pull Requests | up to ~480 | ~1,560 |
|
|
471
|
+
| Security | ~2,280 normally; up to ~4,440 | ~240 |
|
|
472
|
+
|
|
473
|
+
Security is the most expensive. A repository whose newest alert pages are not
|
|
474
|
+
full uses the three base endpoint calls and lands near 2,280 REST requests per
|
|
475
|
+
hour. A full page activates bounded critical/high lanes for Dependabot and code
|
|
476
|
+
scanning, raising the safe projection to about 4,440. Actions is not cheap
|
|
477
|
+
either: one `gh run list` issues two REST requests. `gh-glance --doctor` reports
|
|
478
|
+
the conservative projection beside the server's actual REST and GraphQL
|
|
479
|
+
budgets, which matters on a GitHub Enterprise tenant where the ceilings may not
|
|
480
|
+
be 5,000.
|
|
438
481
|
|
|
439
482
|
Two things pull the real number down. Any endpoint that fails in a way
|
|
440
483
|
`gh-glance` recognises backs off instead of being re-asked every tick — a
|
|
@@ -443,6 +486,13 @@ hour, an authorization failure every 30 seconds, a rate limit every minute.
|
|
|
443
486
|
Pressing `r` clears that backoff and retries immediately. And `--refresh`
|
|
444
487
|
scales the whole figure: doubling the interval halves it.
|
|
445
488
|
|
|
489
|
+
When a refresh fails, the last successful rows stay visible below the live
|
|
490
|
+
error instead of disappearing. If gh-glance is restarted while GitHub is still
|
|
491
|
+
rate-limiting, it loads the saved rows for that same target immediately. Their
|
|
492
|
+
age remains explicit through the `stale` label, and the rate-limit banner still
|
|
493
|
+
describes the current failed request; cached data never turns a failure into a
|
|
494
|
+
false success.
|
|
495
|
+
|
|
446
496
|
One pane on Actions costs about a third of an hourly REST budget, so roughly
|
|
447
497
|
three panes fill it. Past that, `gh-glance` widens its own poll interval: it
|
|
448
498
|
reads your remaining budget once a minute, works out how much of it belongs to
|
|
@@ -458,7 +508,6 @@ a single pane on a healthy budget stays at 5 seconds and shows no badge.
|
|
|
458
508
|
|
|
459
509
|
## Limitations
|
|
460
510
|
|
|
461
|
-
|
|
462
511
|
- **Security tab**: code scanning and secret scanning alerts require [GitHub
|
|
463
512
|
Advanced Security](https://docs.github.com/en/code-security/getting-started/github-security-features).
|
|
464
513
|
On repos/plans without it, `gh-glance` doesn't crash or spam errors -- it
|
|
@@ -490,12 +539,13 @@ a single pane on a healthy budget stays at 5 seconds and shows no badge.
|
|
|
490
539
|
has its own breakpoint and drops to bare keys (`↑↓ Ent r q`) rather than
|
|
491
540
|
truncating.
|
|
492
541
|
- **Mouse reporting lifecycle.** Interactive sessions enable terminal mouse
|
|
493
|
-
reporting
|
|
494
|
-
See [Adjusting column widths](#adjusting-column-widths) for
|
|
495
|
-
behavior while it is active.
|
|
496
|
-
- Issues and pull requests are fetched 150 at a time
|
|
497
|
-
|
|
498
|
-
|
|
542
|
+
reporting only after `w` enters width mode, and disable it when that mode or
|
|
543
|
+
the app exits. See [Adjusting column widths](#adjusting-column-widths) for
|
|
544
|
+
text-selection behavior while it is active.
|
|
545
|
+
- Issues and pull requests are fetched 150 at a time. Each Security source has
|
|
546
|
+
a newest-100 lane; full Dependabot and code-scanning pages activate bounded
|
|
547
|
+
priority lanes. A count is shown as `n+` when any lane fills, so the number is
|
|
548
|
+
never presented as exact when it is not.
|
|
499
549
|
- The Actions **TIME** column measures from the run's start to its last update.
|
|
500
550
|
`gh` exposes no completion timestamp, so a workflow that was re-run later
|
|
501
551
|
reports the span up to the re-run rather than its original duration.
|
|
@@ -544,7 +594,7 @@ in some terminals, which would shift every column to their right.
|
|
|
544
594
|
| Security tab shows `?` instead of a number | The alert endpoints could not be read at all -- an expired SAML session, a token without `security_events`, or an org OAuth restriction. `?` means "unknown", not "zero"; run `gh-glance --doctor` to see which probe failed and how it was classified. |
|
|
545
595
|
| A failing tab seems to have stopped retrying | It backs off deliberately, rather than re-spawning `gh` every five seconds against an endpoint that is refusing. Press `r` to clear the backoff and retry now. |
|
|
546
596
|
| `unknown argument: -v` | `-v` used to mean `--version` and no longer does, because this CLI also has `--verbose`. Use `--version` or `--verbose` explicitly. |
|
|
547
|
-
| `stale 2m` in the status bar | The visible tab has not refreshed successfully for a while — usually a network drop. |
|
|
597
|
+
| `stale 2m` in the status bar | The visible tab has not refreshed successfully for a while — usually a network drop or rate limit. Last-known-good rows can remain visible, including after restart; the live error above the table explains why they are stale. |
|
|
548
598
|
| It exits immediately when piped | Intentional. It is a full-screen dashboard, not a reporting command. |
|
|
549
599
|
| It stopped updating and you cannot tell why | Run `gh-glance --verbose 2>gh-glance.log`, reproduce, then read the log: one line per `gh` call with its duration and outcome. It is redacted the same way `--doctor` is, so it is safe to attach to a bug report. `--doctor --verbose` logs the probes too. |
|
|
550
600
|
| `--verbose` refuses to start | stderr is still your terminal, where the log would draw over the dashboard. Redirect it to a file. |
|