gh-glance 0.13.1 → 0.13.3
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 +30 -1
- package/README.md +2 -1
- package/index.mjs +21 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.13.3] - 2026-09-07
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **An upgrade hold now says whether it will clear or is stuck.** Two different
|
|
15
|
+
states shared the message `Upgrade waiting for legacy quota reset`: one has a
|
|
16
|
+
deadline and ends by itself, the other holds unsettled spend with no reset
|
|
17
|
+
recorded to wait for and never clears. The second now reads `Upgrade blocked:
|
|
18
|
+
older spend cannot be settled or waited out`, and the troubleshooting table
|
|
19
|
+
gives its recovery -- quit every pane and delete the leftover
|
|
20
|
+
`rate-governor-v1-*.json` files. Sharing one message meant a permanently
|
|
21
|
+
blocked pane looked like a temporary wait.
|
|
22
|
+
|
|
23
|
+
## [0.13.2] - 2026-09-07
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- **"Upgrade waiting for legacy quota reset" could never clear.** A pane holding
|
|
28
|
+
a pre-0.12.0 ledger with unsettled GraphQL charges waited on a deadline that
|
|
29
|
+
did not exist, so the message stayed for as long as that file was present --
|
|
30
|
+
weeks, in one case, long after the quota windows it was waiting for had ended.
|
|
31
|
+
Migrating such a ledger deliberately drops its budgets, because their numbers
|
|
32
|
+
came from `/rate_limit` and were never spendable capacity; the reset times
|
|
33
|
+
recorded alongside them are still facts about when those windows closed, and
|
|
34
|
+
are now read as the deadline they always were. Reading a reset is not the same
|
|
35
|
+
as spending against it. Affected panes clear themselves on the next launch.
|
|
36
|
+
|
|
10
37
|
## [0.13.1] - 2026-09-07
|
|
11
38
|
|
|
12
39
|
### Fixed
|
|
@@ -926,7 +953,9 @@ engineering, security, QA and UX. What follows is what changed as a result.
|
|
|
926
953
|
- The `main` field from `package.json`. It advertised the file as importable,
|
|
927
954
|
but importing it took over the terminal or exited the host process.
|
|
928
955
|
|
|
929
|
-
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.13.
|
|
956
|
+
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.13.3...HEAD
|
|
957
|
+
[0.13.3]: https://github.com/juan294/gh-glance/compare/v0.13.2...v0.13.3
|
|
958
|
+
[0.13.2]: https://github.com/juan294/gh-glance/compare/v0.13.1...v0.13.2
|
|
930
959
|
[0.13.1]: https://github.com/juan294/gh-glance/compare/v0.13.0...v0.13.1
|
|
931
960
|
[0.13.0]: https://github.com/juan294/gh-glance/compare/v0.12.0...v0.13.0
|
|
932
961
|
[0.12.0]: https://github.com/juan294/gh-glance/compare/v0.11.2...v0.12.0
|
package/README.md
CHANGED
|
@@ -711,7 +711,8 @@ GH_GLANCE_ICONS=ascii gh-glance
|
|
|
711
711
|
| Repeated GitHub rate-limit messages | A classified rate-limit response is published as one shared resource block. Local panes make no data retry before that block's probe/reset deadline. Use `--doctor` to inspect the resource and reset; repeated manual refresh cannot override it. |
|
|
712
712
|
| It exits immediately when piped | Intentional. It is a full-screen dashboard, not a reporting command. |
|
|
713
713
|
| `Restart required: close older gh-glance panes` | A pane from an older release still holds a live lease in the previous coordination format, which this version cannot join. Quit those panes; this one resumes on its own. Nothing is killed for you, and no state needs deleting. |
|
|
714
|
-
| `Upgrade waiting for legacy quota reset` | The older panes are gone, but left spend that cannot be proven settled. It waits for the affected rate-limit window to reset rather than assume the quota is free. |
|
|
714
|
+
| `Upgrade waiting for legacy quota reset` | The older panes are gone, but left spend that cannot be proven settled. It waits for the affected rate-limit window to reset rather than assume the quota is free. This one has a deadline and clears itself. |
|
|
715
|
+
| `Upgrade blocked: older spend cannot be settled or waited out` | The same unsettled spend, but the older file records no reset to wait for, so there is no deadline and it will not clear on its own. Quit every pane, then delete the `rate-governor-v1-*.json` files in the configuration directory -- they are the leftover evidence, and with no reset recorded there is nothing further to learn from them. Coordination starts clean on the next launch. |
|
|
715
716
|
| `Coordination state unavailable; evidence preserved` | Coordination state could not be read and was deliberately not overwritten, so nothing is lost. Run `gh-glance --doctor` and check the config directory's permissions. |
|
|
716
717
|
| `Shared HTTP request or cooldown in progress` | Panes share one outbound request slot and one cooldown. Another pane holds it, or a server-sent `Retry-After` is still running. Normal pacing, not an error. |
|
|
717
718
|
| `Verified identity unavailable; waiting to retry` | The account behind your credential has not been confirmed yet -- not signed in, a denied or malformed proof, or a slow credential helper. Check `gh auth status`. Retries are rate-limited, so this clears on its own rather than immediately. |
|
package/index.mjs
CHANGED
|
@@ -2528,7 +2528,19 @@ function inspectLegacyMigration(root, state, now) {
|
|
|
2528
2528
|
const uncertain = Object.values(legacy.reservations).some((reservation) =>
|
|
2529
2529
|
["started", "completed"].includes(reservation.status) && reservationCost(reservation, resource, legacy.leases, now) > 0);
|
|
2530
2530
|
if (uncertain) {
|
|
2531
|
-
|
|
2531
|
+
// The deadline may only be read from the migrated view for resources the
|
|
2532
|
+
// migration kept. A v1 file's budgets are dropped on purpose -- they came
|
|
2533
|
+
// from /rate_limit and are not spendable capacity -- but the reset they
|
|
2534
|
+
// record is still a fact about when that window ended, and using it as a
|
|
2535
|
+
// deadline is not the same as admitting work against it. Core already had
|
|
2536
|
+
// a reconstruction above; GraphQL never did, so a v1 file holding any
|
|
2537
|
+
// uncertain GraphQL charge asked a dropped budget for its reset, found
|
|
2538
|
+
// none, and reported legacy-unresolved -- which has no deadline and so
|
|
2539
|
+
// never cleared. The file it came from had a perfectly good reset in it
|
|
2540
|
+
// the whole time.
|
|
2541
|
+
const reset = Number.isFinite(budget?.resetMs)
|
|
2542
|
+
? budget.resetMs
|
|
2543
|
+
: Number(raw?.budgets?.[resource]?.resetMs);
|
|
2532
2544
|
if (!Number.isFinite(reset)) return { ok: false, reason: "legacy-unresolved" };
|
|
2533
2545
|
holdUntil = Math.max(holdUntil, reset + BUDGET_RESET_GRACE_MS);
|
|
2534
2546
|
}
|
|
@@ -3060,7 +3072,14 @@ function retryThrottledTransport(root, host, { now = Date.now } = {}) {
|
|
|
3060
3072
|
|
|
3061
3073
|
function identityCoordinationMessage(reason) {
|
|
3062
3074
|
if (reason === "restart-required") return "Restart required: close older gh-glance panes";
|
|
3063
|
-
|
|
3075
|
+
// These two were one message for a long time, and the difference between them
|
|
3076
|
+
// is the difference between waiting and being stuck. A migration hold has a
|
|
3077
|
+
// deadline and ends by itself. An unresolved legacy ledger has no deadline at
|
|
3078
|
+
// all -- it holds unsettled spend with no reset recorded to wait for -- so the
|
|
3079
|
+
// same wording had people waiting weeks for something that was never going to
|
|
3080
|
+
// arrive. Say which one it is.
|
|
3081
|
+
if (reason === "migration-hold") return "Upgrade waiting for legacy quota reset";
|
|
3082
|
+
if (reason === "legacy-unresolved") return "Upgrade blocked: older spend cannot be settled or waited out";
|
|
3064
3083
|
if (["legacy-corrupt", "corrupt"].includes(reason)) return "Coordination state unavailable; evidence preserved";
|
|
3065
3084
|
if (reason === "transport-busy") return "Shared HTTP request or cooldown in progress";
|
|
3066
3085
|
if (reason === "throttle-paused") return "Paused after repeated rate limits; refresh to retry";
|
package/package.json
CHANGED