gh-glance 0.15.0 → 0.15.2
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 +49 -1
- package/README.md +33 -1
- package/index.mjs +1120 -417
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,52 @@ All notable changes to this project are documented here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.15.2] - 2026-09-24
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Recover aged incomplete acquisition locks through the same fenced owner
|
|
15
|
+
protocol as the quota governor, so one abandoned lock cannot stop every pane.
|
|
16
|
+
- Bound live acquisition claims, fence late owners, and resume the current
|
|
17
|
+
generation after owner loss without publishing stale rows or advancing false
|
|
18
|
+
freshness.
|
|
19
|
+
- Keep core-backed tabs progressing during a GraphQL observer failure and
|
|
20
|
+
retry held queries and pending intents automatically after recovery.
|
|
21
|
+
- Report acquisition metadata and lock health separately in read-only doctor
|
|
22
|
+
output. Keep the visible acquisition cause across unrelated budget updates,
|
|
23
|
+
show source ages beyond 100 hours, and remove duplicate stale wording. Keep
|
|
24
|
+
incomplete Security observations marked Limited while a retry is scheduled.
|
|
25
|
+
- Flush Linux PTY captures and run governor tests separately from the other
|
|
26
|
+
terminal tests to address CI timing failures.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- Pin the Sutura CI workflow to v0.3.3 and declare its Node runtime.
|
|
31
|
+
|
|
32
|
+
## [0.15.1] - 2026-09-17
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- **A failed write no longer wedges every pane on the machine.** The shared
|
|
37
|
+
coordination lock is created with `open("wx")` and its owner record written
|
|
38
|
+
afterwards. When that write failed -- a full disk is the usual cause -- the
|
|
39
|
+
empty lock file stayed behind with no owner to test, so every pane, on every
|
|
40
|
+
request, reported "Coordinating with your other panes" until the file was
|
|
41
|
+
deleted by hand. A failed release (the rename can fail on a full APFS volume)
|
|
42
|
+
left a complete record naming a live owner that then waited on itself. Lock
|
|
43
|
+
creation now removes exactly what it created on any failure, a release that
|
|
44
|
+
cannot rename falls back to unlinking its own record, an acquirer that meets
|
|
45
|
+
its own record releases it, and an unreadable lock or recovery marker that has
|
|
46
|
+
gone untouched for ten seconds is quarantined through the same double-checked
|
|
47
|
+
protocol dead-owner locks already use -- which also clears the files 0.15.0
|
|
48
|
+
panes have already left behind.
|
|
49
|
+
- **`--doctor --probe` names why the governor is unavailable.** The API
|
|
50
|
+
governor line read `unavailable` for a lock nobody released and for a state
|
|
51
|
+
file that failed validation alike, and those are fixed in different places.
|
|
52
|
+
It now reads `unavailable (busy)`, `unavailable (corrupt)`, and so on.
|
|
53
|
+
|
|
8
54
|
## [0.15.0] - 2026-09-15
|
|
9
55
|
|
|
10
56
|
### Added
|
|
@@ -1120,7 +1166,9 @@ engineering, security, QA and UX. What follows is what changed as a result.
|
|
|
1120
1166
|
- The `main` field from `package.json`. It advertised the file as importable,
|
|
1121
1167
|
but importing it took over the terminal or exited the host process.
|
|
1122
1168
|
|
|
1123
|
-
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.15.
|
|
1169
|
+
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.15.2...HEAD
|
|
1170
|
+
[0.15.2]: https://github.com/juan294/gh-glance/compare/v0.15.1...v0.15.2
|
|
1171
|
+
[0.15.1]: https://github.com/juan294/gh-glance/compare/v0.15.0...v0.15.1
|
|
1124
1172
|
[0.15.0]: https://github.com/juan294/gh-glance/compare/v0.14.1...v0.15.0
|
|
1125
1173
|
[0.14.1]: https://github.com/juan294/gh-glance/compare/v0.14.0...v0.14.1
|
|
1126
1174
|
[0.14.0]: https://github.com/juan294/gh-glance/compare/v0.13.3...v0.14.0
|
package/README.md
CHANGED
|
@@ -718,7 +718,9 @@ cached subscription is a cache hit, not a coalesced request. Active queries are
|
|
|
718
718
|
queries with a live subscriber. Retained queries remain listed as `cache-only`
|
|
719
719
|
without inflating that count. Holds distinguish observer failure, primary and
|
|
720
720
|
secondary limits, disconnected acquisition, shared producer waits, and local
|
|
721
|
-
coordination.
|
|
721
|
+
coordination. Doctor checks acquisition metadata, referenced snapshot artifacts,
|
|
722
|
+
and the lock path separately. A readable metadata file does not make an aged
|
|
723
|
+
orphan lock or invalid snapshot healthy; plain doctor never repairs either.
|
|
722
724
|
|
|
723
725
|
Use `gh-glance --doctor --probe` when live capability evidence is needed. Probe
|
|
724
726
|
mode uses an ephemeral governor lease and admits every quota-consuming endpoint
|
|
@@ -881,6 +883,33 @@ when the candidate and baseline used a compatible workload, machine, platform,
|
|
|
881
883
|
and runtime. Missing or incompatible baseline values stay labelled as such;
|
|
882
884
|
fixture performance is not presented as live GitHub performance.
|
|
883
885
|
|
|
886
|
+
### Live freshness monitor
|
|
887
|
+
|
|
888
|
+
The repository includes a read-only monitor for a declared set of live panes.
|
|
889
|
+
Create its manifest independently of the acquisition store, after each pane has
|
|
890
|
+
installed its subscription. Each entry fixes the pane ID, process ID, expected
|
|
891
|
+
repository and tab, start time in Unix milliseconds, and effective cadence:
|
|
892
|
+
|
|
893
|
+
```json
|
|
894
|
+
{"schema":1,"panes":[{"id":"my-pane","pid":12345,"repository":"owner/repo","tab":"actions","startedAt":1800000000000,"cadenceMs":5000}]}
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
Use the same private config root as the panes and write a new report path:
|
|
898
|
+
|
|
899
|
+
```sh
|
|
900
|
+
node scripts/freshness-monitor.mjs --manifest panes.json \
|
|
901
|
+
--store "$XDG_CONFIG_HOME/gh-glance/coordination-v2/acquisition.json" \
|
|
902
|
+
--report freshness.jsonl --interval-ms 5000 --duration-ms 86400000
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
The JSONL contains hashed pane/target labels, validated source-success times,
|
|
906
|
+
maximum eligible gaps, overdue time, lock status, and declared hold intervals.
|
|
907
|
+
Missing or expired subscriptions and corrupt stores fail the run, even when no
|
|
908
|
+
subscriber remains in the store. To close an expectation after an intentional
|
|
909
|
+
pane exit, add its `exitedAt` timestamp to the manifest. Only a `holds` interval
|
|
910
|
+
declared in that pane entry and confirmed by the runtime excludes time from
|
|
911
|
+
the cadence check. No GitHub request is made by the monitor.
|
|
912
|
+
|
|
884
913
|
## Limitations
|
|
885
914
|
|
|
886
915
|
- **Security tab**: code scanning and secret scanning alerts require [GitHub
|
|
@@ -983,6 +1012,9 @@ GH_GLANCE_ICONS=ascii gh-glance
|
|
|
983
1012
|
| `Shared` | This pane is using a generation acquired for matching local subscribers. This is coalescing, not quota scarcity. |
|
|
984
1013
|
| `Paused` with a reset time | The active tab's REST or GraphQL resource is at its reserve, exhausted, or under a shared rate-limit block. Wait for the stated reset/probe. Other tabs can continue when they use the healthy resource. |
|
|
985
1014
|
| `Paused` without a reset time | Budget or coordinator evidence is unknown, corrupt, locked, or unwritable. No data call is started. Run `gh-glance --doctor`; also check the config directory permissions and whether another live process owns its private lock. |
|
|
1015
|
+
| `--doctor` reports an acquisition lock as `orphaned` | A dead owner or an aged incomplete lock record was found. A running pane retries recovery through the private lock protocol; plain doctor only inspects it. If the state does not change, inspect the reported lock age and the config directory permissions. |
|
|
1016
|
+
| `--doctor` reports an acquisition lock as `busy` | A live or unconfirmed owner, or a recent incomplete lock record, is present. Keep the other pane running and check again after the reported age advances; plain doctor does not steal a lock. |
|
|
1017
|
+
| Rows stay old while the footer shows a coordination reason | The rows remain last-known-good data. The reason persists until a valid shared snapshot or completed cleanup clears that acquisition failure; a healthy rate-budget probe alone does not prove that acquisition succeeded. The footer shows the source age and the notice line gives the longer reason. |
|
|
986
1018
|
| A failing tab seems to have stopped retrying | Recognized endpoint failures back off rather than re-spawning `gh` at the floor. Press `r` to request a higher-priority retry, or `R` to also clear the endpoint backoff; either way the retry waits for a safe grant, so the tab remains Watching or Paused. |
|
|
987
1019
|
| `unknown argument: -v` | `-v` used to mean `--version` and no longer does, because this CLI also has `--verbose`. Use `--version` or `--verbose` explicitly. |
|
|
988
1020
|
| Cached rows plus `Paused`, `Stale`, or `Disconnected` | The rows are last-known-good data while the live source is blocked, overdue, or unavailable. A cache read never advances source success. The footer never calls stale or disconnected rows `Watching`. |
|