lobstah 0.6.2 → 0.6.4
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/dist/main.js +854 -272
- package/dist/runner.js +253 -19
- package/docs/configuration.md +21 -1
- package/docs/man.md +72 -20
- package/docs/vocabulary.md +15 -6
- package/package.json +1 -1
package/docs/vocabulary.md
CHANGED
|
@@ -83,9 +83,14 @@ Effects of `paused` with `--waiting-on`:
|
|
|
83
83
|
- With `--waiting-on pr` or `--waiting-on review`: when the PR it waits on
|
|
84
84
|
merges, the daemon finishes the dispatch `done` (`the PR merged: <url>`);
|
|
85
85
|
closed without merge, `failed`. The PR is the `--link` when it names a
|
|
86
|
-
GitHub PR
|
|
87
|
-
dispatch
|
|
88
|
-
|
|
86
|
+
GitHub PR that is not the dispatch's own. Otherwise it is every PR of the
|
|
87
|
+
dispatch (`prUrl` and `prUrls`), else its chain's PR, else the PRs of the
|
|
88
|
+
`pr:` watches the dispatch owns; the dispatch finishes when all of them
|
|
89
|
+
have ended. Every paused dispatch in the chain that waits on the PR is
|
|
90
|
+
finished. The report registers the watch of the
|
|
91
|
+
dispatch's own PR when it has none, and the daemon reads a waited-on PR
|
|
92
|
+
that no live dispatch-owned watch observes. When no PR is known, the
|
|
93
|
+
report prints a `warning`.
|
|
89
94
|
- No attention, no notice, no pet. It is a state, not a question.
|
|
90
95
|
|
|
91
96
|
Source of truth: `WAITING_ON` in `packages/core/src/types.ts`.
|
|
@@ -349,7 +354,7 @@ evidence).
|
|
|
349
354
|
| `draft` | Draft flipped (`value`). Evidence only. |
|
|
350
355
|
| `merged` / `closed` | Terminal; the check sets `done`, and the watch retires once delivered. Emitted only on an open → terminal change, never on the first observation. |
|
|
351
356
|
| evidence `pr` | `{ url, number, state, draft, reviewDecision, mergeStateStatus, headSha, checks: { total, passed, failed, pending, unknown? }, review: { unresolvedThreads, changesRequested, lastReviewAt }, observedAt }`. Check counts use only the latest run per check name and app/workflow. `CANCELLED` and `STALE` latest runs are unknown, not failed. The PR record also stores repair status, attempts, and reason. `prBadge` shows `repairing: conflict (attempt 1 of 2)` while a repair is in flight, and ends in `repair waits: <heldBy>` while a repair waits; tend, `catch`, and the glass share the badge. |
|
|
352
|
-
| waiting repair | `repair.status: waiting` on a PR record: a repair is due but is not queued. `heldBy` names the holder: `wt:<trap>` or `dispatch:<id8>` (a live worker holds the PR's head branch or the head branch of a PR below it in the stack), `helm` (the helm cancelled a repair of this PR), `hold` or `dispatch:<id8>` (`watch hold`), `settle` (the head, base head, or failing checks changed less than `[watch].repairSettleSecs` ago; `until` says when), or `checks` (the latest run of a failing check is in progress or passed). `reason` says what holds it. A wait is not an attempt and raises no attention item. |
|
|
357
|
+
| waiting repair | `repair.status: waiting` on a PR record: a repair is due but is not queued. `heldBy` names the holder: `wt:<trap>` or `dispatch:<id8>` (a live worker holds the PR's head branch or the head branch of a PR below it in the stack), `helm` (the helm cancelled a repair of this PR), `hold` or `dispatch:<id8>` (`watch hold`), `settle` (the head, base head, or failing checks changed less than `[watch].repairSettleSecs` ago, or, for a conflict repair, the PR was approved less than that ago; `until` says when), or `checks` (the latest run of a failing check is in progress or passed). `reason` says what holds it. A wait is not an attempt and raises no attention item. |
|
|
353
358
|
| repair chore | A daemon repair or rebase runs in the `chore` lane under `[limits].choreConcurrent`. A repair chore for a trap-built PR waits for its live owning trap up to `[watch].repairTrapWaitSecs` (default 600), then runs headless in its own PR-branch checkout. A headless-built PR's repair runs headless in its origin worktree when safe. No headless chore uses a trap's worktree. This bounded fallback applies only to system repair chores; a person's addressed work is sticky and never falls back. Tend, daemon status, doctor, and the glass show the PR, lane, worker, and trap wait. |
|
|
354
359
|
| live worker | An active headless dispatch, or a trap with an open catch. It holds a branch that its worktree has checked out, that its current branch tracks, or that it pushed during its current dispatch (evidence `pushes`). It holds a PR that its evidence names or that its chain owns. |
|
|
355
360
|
| evidence `pushes` | `[{ branch, at }]`: the branches a dispatch pushed, as lobstah saw them. The runner records its own pushes; the runner records a headless worker's `git push` from the harness event stream (branch names only); `soak beat` records a trap's `git push`. |
|
|
@@ -368,7 +373,11 @@ PR's head branch or a branch below it in the stack, until the PR has settled
|
|
|
368
373
|
for `[watch].repairSettleSecs`, while a failing check's latest run is in
|
|
369
374
|
progress or passed, and while the PR's watch is held. A wait is not an
|
|
370
375
|
attempt. A repair whose worker reported `failed "push rejected: ..."` is `blocked` at the
|
|
371
|
-
moved head and at the head it started from.
|
|
376
|
+
moved head and at the head it started from. After
|
|
377
|
+
`[watch].maxRepairsWithoutProgress` repairs in a row that left the PR at
|
|
378
|
+
their own push and unmerged, repairs of that PR stop (`gave-up`, a
|
|
379
|
+
`repair-stopped` notice) until it merges or closes, a push that is not the
|
|
380
|
+
repair's moves the head, or `lobstah watch release <key>`. The rest is evidence.
|
|
372
381
|
Merged and closed reach the helm as a `pr-merged` / `pr-closed` notice,
|
|
373
382
|
posted once by whichever process first records the open → terminal
|
|
374
383
|
transition on the **PR record** — not by event routing. A PR whose first
|
|
@@ -431,7 +440,7 @@ worktree is refused (the session lock); a stale one is adopted.
|
|
|
431
440
|
| defective enlistment | A stale registration that **never parked** — signed on but never listened (usually no Stop hook). Not swept: the helm gets a `trap-defective` notice with the remedy (`soak --wait`), and the registration stays so the address keeps protecting its work. |
|
|
432
441
|
| reserved trap | A trap `lobstah trap reserve` created before any session signs on as it: a name, a `wt:` id, and a one-time ticket, shown as `starting`. Work addressed to it waits. A session redeems the ticket with `soak --ticket` (or `LOBSTAH_TRAP_TICKET`) and signs on as that trap. Unredeemed past its deadline, it fails with a `trap-start-failed` notice and its work stays queued. `stow --wt <name>` withdraws it. |
|
|
433
442
|
| trap request | A trap the human asked for from the glass's **+ New trap** button: a `trap-request` request in `requests/<id>.json` with a repo and a harness. It wakes the helm as a `trap-request` event; the helm reserves it with `trap reserve --request <id>`, which closes it. |
|
|
434
|
-
| notice | The helm's attention channel for non-status events (`~/.lobstah/notices/`): reservations (`trap-starting`), reservations that did not start (`trap-start-failed`), trap requests from the glass (`trap-request`), sign-ons, first parks, sign-offs, ghosts, defective enlistments, orphaned work, bounced messages, PRs merged or closed, watches held over the fork cap (`watch-held`), failing (`watch-failing`), and recovered (`watch-recovered`), free-space holds (`disk-held`, `disk-cleared`), worktrees released after their PR merged (`worktree-released`, one per cull pass), a repair or rebase that could not push to its PR's branch (`push-failed`), and a human's answer to a decision (`decision-answer`; its ref is the request id in `~/.lobstah/requests/`). A trap leaves the registry only through a `trap-stowed` or `trap-ghosted` notice — the end-state is always explicit. Consumed by `man wait`/the park; a first park (`trap-listening`) is consumed without waking anyone. tend always shows the recent tail. |
|
|
443
|
+
| notice | The helm's attention channel for non-status events (`~/.lobstah/notices/`): reservations (`trap-starting`), reservations that did not start (`trap-start-failed`), trap requests from the glass (`trap-request`), sign-ons, first parks, sign-offs, ghosts, defective enlistments, orphaned work, bounced messages, PRs merged or closed, watches held over the fork cap (`watch-held`), failing (`watch-failing`), and recovered (`watch-recovered`), free-space holds (`disk-held`, `disk-cleared`), worktrees released after their PR merged (`worktree-released`, one per cull pass), a repair or rebase that could not push to its PR's branch (`push-failed`), repairs stopped on a PR that made no progress (`repair-stopped`), and a human's answer to a decision (`decision-answer`; its ref is the request id in `~/.lobstah/requests/`). A trap leaves the registry only through a `trap-stowed` or `trap-ghosted` notice — the end-state is always explicit. Consumed by `man wait`/the park; a first park (`trap-listening`) is consumed without waking anyone. tend always shows the recent tail. |
|
|
435
444
|
|
|
436
445
|
Delivery routes by ownership, same as watches: a continuation for a chain
|
|
437
446
|
claimed by a live trap is addressed back to that trap and stays sticky.
|