dorfl 0.13.2 → 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.
Files changed (52) hide show
  1. package/dist/claim-cas.d.ts.map +1 -1
  2. package/dist/claim-cas.js +39 -0
  3. package/dist/claim-cas.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +10 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/complete.d.ts.map +1 -1
  8. package/dist/complete.js +9 -2
  9. package/dist/complete.js.map +1 -1
  10. package/dist/cwd-section.d.ts +40 -0
  11. package/dist/cwd-section.d.ts.map +1 -1
  12. package/dist/cwd-section.js +105 -5
  13. package/dist/cwd-section.js.map +1 -1
  14. package/dist/format.d.ts.map +1 -1
  15. package/dist/format.js +56 -0
  16. package/dist/format.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/item-lock.d.ts +167 -0
  22. package/dist/item-lock.d.ts.map +1 -1
  23. package/dist/item-lock.js +255 -1
  24. package/dist/item-lock.js.map +1 -1
  25. package/dist/needs-attention.d.ts +153 -1
  26. package/dist/needs-attention.d.ts.map +1 -1
  27. package/dist/needs-attention.js +357 -2
  28. package/dist/needs-attention.js.map +1 -1
  29. package/dist/reconcile-terminal.d.ts +97 -0
  30. package/dist/reconcile-terminal.d.ts.map +1 -0
  31. package/dist/reconcile-terminal.js +88 -0
  32. package/dist/reconcile-terminal.js.map +1 -0
  33. package/dist/scan.d.ts +17 -0
  34. package/dist/scan.d.ts.map +1 -1
  35. package/dist/scan.js +51 -2
  36. package/dist/scan.js.map +1 -1
  37. package/dist/status.d.ts +28 -0
  38. package/dist/status.d.ts.map +1 -1
  39. package/dist/status.js +79 -2
  40. package/dist/status.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/claim-cas.ts +40 -0
  43. package/src/cli.ts +18 -1
  44. package/src/complete.ts +9 -2
  45. package/src/cwd-section.ts +151 -4
  46. package/src/format.ts +72 -0
  47. package/src/index.ts +2 -0
  48. package/src/item-lock.ts +369 -1
  49. package/src/needs-attention.ts +474 -0
  50. package/src/reconcile-terminal.ts +180 -0
  51. package/src/scan.ts +82 -5
  52. package/src/status.ts +131 -6
@@ -0,0 +1,97 @@
1
+ import { type TerminalLockClassification, type TerminalReconcileReport } from './item-lock.js';
2
+ import { type TerminalQuestionReport, type TerminalQuestionDrainResult } from './needs-attention.js';
3
+ /**
4
+ * **The ONE terminal-state reconciliation pass.**
5
+ *
6
+ * Two defects of the same shape motivated this, and they are deliberately fixed
7
+ * by ONE mechanism rather than two:
8
+ *
9
+ * 1. **The propose-path lock leak.** `complete --propose` keeps the per-item
10
+ * lock held across the open PR and defers its release to the merge, so every
11
+ * completed item leaked its `refs/dorfl/lock/<entry>` ref and reported
12
+ * in-progress for ever.
13
+ * 2. **The stranded question state.** A bounce atomically writes a sidecar plus
14
+ * `needsAnswers:true`; if the human disagrees, re-dispatches, and the rebuild
15
+ * SUCCEEDS, neither half is ever cleared. The item comes to rest in
16
+ * `tasks/done/` still carrying a question asking whether to CANCEL it, and a
17
+ * `needsAnswers` gate left armed over shipped work.
18
+ *
19
+ * They share a cause, a moment, and a blind spot. The cause is that both are
20
+ * cleared by a step that only runs on a path the item did not take. The moment
21
+ * both become moot is exactly the same one: the DONE-MOVE landing on the
22
+ * arbiter's `main`. And the blind spot is that each is detectable only from a
23
+ * loop the manual path never enters (`gc --ledger --reap-stale-locks` for the
24
+ * lock, the `advance` tick's `invariant-violation` classifier for the questions),
25
+ * while a human driving `do` and merging a PR enters neither.
26
+ *
27
+ * Dorfl cannot hook the merge: nobody runs a dorfl process when a human clicks
28
+ * merge on GitHub, and there is no daemon. So the shape has to be RECONCILE
29
+ * AGAINST `main` rather than react to the merge. The merge event is unobservable;
30
+ * its consequence on `main` is durable, so a late pass converges just as well as
31
+ * a timely one.
32
+ *
33
+ * ONE DISCRIMINATOR governs both halves: the item's POSITION on `<arbiter>/main`.
34
+ * Not a branch, not a PR, not the holder, not age, not the flag/sidecar
35
+ * disagreement on its own. An item that has reached a terminal resting folder is
36
+ * finished and cannot need either piece of state; an item resting anywhere else
37
+ * keeps everything it has, untouched. Both sub-passes resolve every uncertainty
38
+ * towards LEAVING STATE ALONE, because the failure modes are asymmetric and both
39
+ * severe: releasing a live lock would let two claimants build one item, and
40
+ * clearing a live `needsAnswers` would disarm a gate and hand gated work to
41
+ * agents.
42
+ *
43
+ * WHERE THIS RUNS. On the CLAIM path, which already writes to the arbiter and
44
+ * already runs on every unit of work, so the residue drains as a side effect of
45
+ * ordinary use. The read-only surfaces (`status`, `scan`) use the CLASSIFY twin
46
+ * ({@link classifyTerminalState}) to REPORT the same residue without writing, and
47
+ * perform this pass only under an explicit `--reconcile-locks`. Putting the
48
+ * automatic clear on a write path rather than behind a flag on a read command is
49
+ * what makes the fix real: an offer nobody is routed to is what let both defects
50
+ * accumulate in the first place.
51
+ */
52
+ export interface TerminalStateReport {
53
+ locks: TerminalReconcileReport;
54
+ questions: TerminalQuestionDrainResult;
55
+ }
56
+ /** The read-only twin of {@link TerminalStateReport}: what a reconcile WOULD do. */
57
+ export interface TerminalStateClassification {
58
+ locks: TerminalLockClassification;
59
+ questions: TerminalQuestionReport;
60
+ }
61
+ export interface TerminalStateOptions {
62
+ cwd: string;
63
+ arbiter?: string;
64
+ env?: NodeJS.ProcessEnv;
65
+ /**
66
+ * The ref holding the arbiter's authoritative `main`, for the READ side.
67
+ * Defaults to `<arbiter>/main` (the WORKING-CLONE shape); a BARE HUB MIRROR has
68
+ * no `refs/remotes/*` namespace at all and must pass `'main'`.
69
+ *
70
+ * NOTE: this governs the CLASSIFY/read side only. The question-drain's WRITE
71
+ * side publishes through `runTreelessLedgerMove`, which resolves its own CAS
72
+ * base from `<arbiter>/main`, so {@link reconcileTerminalState} is supported
73
+ * from a WORKING CLONE only. Classification is safe from either shape.
74
+ */
75
+ mainRef?: string;
76
+ note?: (message: string) => void;
77
+ }
78
+ /**
79
+ * READ-ONLY: classify every piece of terminal-state residue on the arbiter (stale
80
+ * locks + stranded question state) without touching anything. This is what the
81
+ * read commands render, so finished work stops being reported as in-flight or as
82
+ * blocked on open questions.
83
+ */
84
+ export declare function classifyTerminalState(opts: TerminalStateOptions): Promise<TerminalStateClassification>;
85
+ /**
86
+ * WRITE: settle both halves of an item's terminal residue in one pass. The lock
87
+ * sub-pass deletes stale lock refs; the question sub-pass publishes ONE tree-less
88
+ * commit to `main` removing stale sidecars and clearing stale `needsAnswers`
89
+ * flags.
90
+ *
91
+ * Order matters only for reporting, not correctness: the two touch disjoint state
92
+ * (a hidden ref namespace vs `main`'s tree) and neither depends on the other. It
93
+ * never throws; each sub-pass degrades independently, so a failure to reach the
94
+ * lock refs does not prevent the question drain, or vice versa.
95
+ */
96
+ export declare function reconcileTerminalState(opts: TerminalStateOptions): Promise<TerminalStateReport>;
97
+ //# sourceMappingURL=reconcile-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-terminal.d.ts","sourceRoot":"","sources":["../src/reconcile-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGN,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,2BAA2B,CAAC;CACvC;AAED,oFAAoF;AACpF,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,0BAA0B,CAAC;IAClC,SAAS,EAAE,sBAAsB,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,oBAAoB,GACxB,OAAO,CAAC,2BAA2B,CAAC,CAatC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC3C,IAAI,EAAE,oBAAoB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAmD9B"}
@@ -0,0 +1,88 @@
1
+ import { classifyTerminalItemLocks, reconcileTerminalItemLocks, refreshMainRef, } from './item-lock.js';
2
+ import { classifyTerminalQuestionResidue, reconcileTerminalQuestionResidue, } from './needs-attention.js';
3
+ /**
4
+ * READ-ONLY: classify every piece of terminal-state residue on the arbiter (stale
5
+ * locks + stranded question state) without touching anything. This is what the
6
+ * read commands render, so finished work stops being reported as in-flight or as
7
+ * blocked on open questions.
8
+ */
9
+ export async function classifyTerminalState(opts) {
10
+ const arbiter = opts.arbiter ?? 'origin';
11
+ const mainRef = opts.mainRef ?? `${arbiter}/main`;
12
+ const locks = await classifyTerminalItemLocks(opts.cwd, arbiter, opts.env, {
13
+ mainRef,
14
+ });
15
+ const questions = await classifyTerminalQuestionResidue({
16
+ cwd: opts.cwd,
17
+ arbiter,
18
+ mainRef,
19
+ env: opts.env,
20
+ });
21
+ return { locks, questions };
22
+ }
23
+ /**
24
+ * WRITE: settle both halves of an item's terminal residue in one pass. The lock
25
+ * sub-pass deletes stale lock refs; the question sub-pass publishes ONE tree-less
26
+ * commit to `main` removing stale sidecars and clearing stale `needsAnswers`
27
+ * flags.
28
+ *
29
+ * Order matters only for reporting, not correctness: the two touch disjoint state
30
+ * (a hidden ref namespace vs `main`'s tree) and neither depends on the other. It
31
+ * never throws; each sub-pass degrades independently, so a failure to reach the
32
+ * lock refs does not prevent the question drain, or vice versa.
33
+ */
34
+ export async function reconcileTerminalState(opts) {
35
+ const arbiter = opts.arbiter ?? 'origin';
36
+ const mainRef = opts.mainRef ?? `${arbiter}/main`;
37
+ // ONE refresh of `main` for the WHOLE pass. Both sub-passes read the same
38
+ // durable record, so fetching it twice per claim is pure waste on a hot path.
39
+ // A failed refresh is not fatal: each sub-pass independently resolves every
40
+ // uncertainty towards leaving state alone.
41
+ await refreshMainRef(mainRef, arbiter, opts.cwd, opts.env);
42
+ // Each sub-pass is independently guarded so one cannot take the other down,
43
+ // and so a caller running this as opportunistic hygiene (the claim path) is
44
+ // never failed by unrelated residue. Both are documented as never throwing;
45
+ // this is the belt that makes that true even if a callee regresses.
46
+ let locks = {
47
+ released: [],
48
+ kept: [],
49
+ stillHeld: [],
50
+ errors: [],
51
+ };
52
+ try {
53
+ locks = await reconcileTerminalItemLocks(opts.cwd, arbiter, opts.env, {
54
+ mainRef,
55
+ mainAlreadyFresh: true,
56
+ });
57
+ }
58
+ catch (err) {
59
+ locks.errors.push({
60
+ entry: '(locks)',
61
+ message: err instanceof Error ? err.message : String(err),
62
+ });
63
+ }
64
+ let questions = {
65
+ drained: [],
66
+ unflagged: [],
67
+ answeredHeld: [],
68
+ errors: [],
69
+ };
70
+ try {
71
+ questions = await reconcileTerminalQuestionResidue({
72
+ cwd: opts.cwd,
73
+ arbiter,
74
+ mainRef,
75
+ env: opts.env,
76
+ mainAlreadyFresh: true,
77
+ note: opts.note,
78
+ });
79
+ }
80
+ catch (err) {
81
+ questions.errors.push({
82
+ item: '(questions)',
83
+ message: err instanceof Error ? err.message : String(err),
84
+ });
85
+ }
86
+ return { locks, questions };
87
+ }
88
+ //# sourceMappingURL=reconcile-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-terminal.js","sourceRoot":"","sources":["../src/reconcile-terminal.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts CHANGED
@@ -168,6 +168,15 @@ export interface RepoReport {
168
168
  * {@link listItemLockEntries}). Optional so older literals stay valid.
169
169
  */
170
170
  lockHeld?: LockEntry[];
171
+ /**
172
+ * Lock `<entry>` names whose item is already at REST in a terminal folder on
173
+ * this repo's `main`: finished work (typically a merged propose PR) whose lock
174
+ * has not been released yet. Reported SEPARATELY from {@link lockHeld}, and
175
+ * deliberately excluded from it, so completed work never reads as in-progress.
176
+ * `scan` is read-only and RELEASES nothing; these drain on the next claim, or
177
+ * under `scan --reconcile-locks`.
178
+ */
179
+ staleLocks?: string[];
171
180
  }
172
181
  /** The full cross-repo scan result. */
173
182
  export interface ScanReport {
@@ -280,6 +289,14 @@ export declare function scoreItems(state: Pick<LocalLedgerState, 'ready' | 'done
280
289
  */
281
290
  export declare function scan(config: Config, options?: {
282
291
  warn?: (message: string) => void;
292
+ /**
293
+ * OPT-IN WRITE (`scan --reconcile-locks`). Omitted/`false` (the DEFAULT) keeps
294
+ * `scan` strictly READ-ONLY: stale terminal locks are classified and excluded
295
+ * from the in-flight surface, but nothing on any arbiter is touched. `true`
296
+ * additionally RELEASES them. Routine convergence does not need this, the
297
+ * claim path sweeps on every unit of work.
298
+ */
299
+ reconcileLocks?: boolean;
283
300
  env?: NodeJS.ProcessEnv;
284
301
  /**
285
302
  * The per-machine {@link ConfigOverrideMap} (from `loadConfigOverride`),
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
package/dist/scan.js CHANGED
@@ -6,7 +6,7 @@ import { resolveRepoConfig } from './repo-config.js';
6
6
  import { taskableSpecs } from './select-priority.js';
7
7
  import { lintLocalLedger, lintRefLedger, } from './ledger-lint.js';
8
8
  import { gatherLifecycleInPlace, gatherLifecycleMirror, } from './lifecycle-gather.js';
9
- import { heldTaskSlugs, listItemLockEntries, } from './item-lock.js';
9
+ import { heldTaskSlugs, classifyTerminalItemLocks, reconcileTerminalItemLocks, } from './item-lock.js';
10
10
  /**
11
11
  * The CREATE-side lifecycle gates for the propose-matrix lifecycle pool, derived
12
12
  * from a repo's resolved config. Maps the config's question-surfacing gate family
@@ -225,6 +225,52 @@ export async function scan(config, options = {}) {
225
225
  // Held-slug subtraction: a bare hub mirror's arbiter is its `origin`. Reads
226
226
  // the lock refs from the mirror's origin; non-fatal (empty set on any fault),
227
227
  // so the read-only scan degrades gracefully exactly as its config reads do.
228
+ // CLASSIFY the mirror's held locks against its `main` (fix for the propose-path
229
+ // lock leak; observation
230
+ // `every-completed-task-leaves-its-lock-ref-reporting-in-progress`). A
231
+ // `complete --propose` KEEPS its per-item lock held across the open PR and
232
+ // defers the release to the PR merge, an event NO dorfl process is present
233
+ // for (there is no merge hook and no daemon), so the release never fired and
234
+ // every completed item stayed locked and reported in-progress for ever.
235
+ //
236
+ // `scan` is READ-ONLY (it says so in its own description) and stays that way:
237
+ // we only CLASSIFY here, so a lock whose item has come to REST in a terminal
238
+ // folder on `main` is reported as STALE instead of being listed as an
239
+ // in-flight hold. The refs are drained by the paths that already write on
240
+ // every unit of work (the claim path). Best-effort and never throws: any
241
+ // fault treats every lock as HELD, so `scan` degrades to its previous
242
+ // behaviour.
243
+ //
244
+ // Under the explicit `--reconcile-locks` opt-in, the ONE way `scan` writes
245
+ // the same classification is applied instead of merely reported.
246
+ //
247
+ // A hub mirror is a BARE clone with no `refs/remotes/*` namespace, so its
248
+ // copy of the arbiter's main is the plain `main` ref (the SAME ref
249
+ // `lintRefLedger` below reads). Passing the default `origin/main` would fail
250
+ // EVERY probe with `invalid object name` and silently classify every lock as
251
+ // in-flight, making this a permanent no-op.
252
+ const MIRROR_MAIN = { mainRef: 'main' };
253
+ let staleLockEntries;
254
+ let lockHeld;
255
+ if (options.reconcileLocks === true) {
256
+ const swept = await reconcileTerminalItemLocks(mirror.path, 'origin', options.env, MIRROR_MAIN);
257
+ if (swept.released.length > 0) {
258
+ options.warn?.(`${mirror.path}: released ${swept.released.length} stale per-item ` +
259
+ 'lock(s) whose item is terminal on main (the work landed; a ' +
260
+ `propose PR merged out-of-band): ${swept.released.join(', ')}`);
261
+ }
262
+ // Under an EXPLICIT drain request, a refusal must be reported.
263
+ for (const e of swept.errors) {
264
+ options.warn?.(`${mirror.path}: could not release '${e.entry}': ${e.message}`);
265
+ }
266
+ staleLockEntries = [];
267
+ lockHeld = swept.stillHeld;
268
+ }
269
+ else {
270
+ const classified = await classifyTerminalItemLocks(mirror.path, 'origin', options.env, MIRROR_MAIN);
271
+ staleLockEntries = classified.terminal.map((l) => l.entry);
272
+ lockHeld = classified.inFlight;
273
+ }
228
274
  const heldSlugs = await heldTaskSlugs(mirror.path, 'origin', options.env);
229
275
  // The PER-ITEM LOCK in-flight view (spec US #8; task
230
276
  // `needs-attention-as-stuck-lock-state`): ADDITIONALLY read the full held
@@ -234,7 +280,9 @@ export async function scan(config, options = {}) {
234
280
  // best-effort (empty list on any fault), so the read-only scan degrades
235
281
  // gracefully. This is a SURFACE only — eligibility/selection stay offline on
236
282
  // `main` (the subtraction above), not gated on this view.
237
- const lockHeld = await listItemLockEntries(mirror.path, 'origin', options.env);
283
+ // `lockHeld` comes STRAIGHT from the classification above, so the stale ones
284
+ // are already excluded (finished work is not an in-flight hold) and we avoid a
285
+ // second `ls-remote` + fetch per mirror.
238
286
  // Spec pool — the TASKABLE-SPEC companion of the task pool above
239
287
  // (`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`). Resolve
240
288
  // `autoTask` PER REPO from the mirror's COMMITTED `dorfl.json`
@@ -304,6 +352,7 @@ export async function scan(config, options = {}) {
304
352
  lifecycle,
305
353
  ledgerDuplicates,
306
354
  lockHeld,
355
+ staleLocks: staleLockEntries,
307
356
  });
308
357
  }
309
358
  return {
package/dist/scan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
package/dist/status.d.ts CHANGED
@@ -83,6 +83,15 @@ export interface RepoLockEntries {
83
83
  /** The held lock entries (action × state + reason), sorted by entry. */
84
84
  entries: LockEntry[];
85
85
  }
86
+ /** One repo's STALE per-item locks: entries whose item has already come to rest
87
+ * in a terminal folder on that repo's `main`, so the hold is finished work
88
+ * awaiting release rather than an in-flight claim. */
89
+ export interface RepoStaleLocks {
90
+ /** The repo path whose lock refs were classified (a hub-mirror path). */
91
+ repoPath: string;
92
+ /** The stale lock `<entry>` names, sorted. */
93
+ entries: string[];
94
+ }
86
95
  /** One repo's one-slug-one-folder LINT result, surfaced for the dashboard. */
87
96
  export interface RepoLedgerDuplicates {
88
97
  /** The repo path whose `work/` ledger was linted (a hub-mirror path). */
@@ -109,6 +118,16 @@ export interface StatusReport {
109
118
  * populates it (possibly empty).
110
119
  */
111
120
  lockHeld?: RepoLockEntries[];
121
+ /**
122
+ * Per registered hub mirror, the lock `<entry>` names whose item is already at
123
+ * REST in a terminal folder on that mirror's `main`, finished work (typically
124
+ * a merged propose PR) whose lock has not been released yet. Reported
125
+ * SEPARATELY from {@link StatusReport.lockHeld}, and deliberately excluded from
126
+ * it, so completed work never reads as in-progress (the symptom of the
127
+ * propose-path lock leak). `status` RELEASES nothing by default, it is
128
+ * read-only; these drain on the next claim, or under `--reconcile-locks`.
129
+ */
130
+ staleLocks?: RepoStaleLocks[];
112
131
  /**
113
132
  * The one-slug-one-folder LINT (spec `ledger-integrity` story 3): per registered
114
133
  * hub mirror, any slug present in MORE THAN ONE `work/` status folder (a corrupt
@@ -155,6 +174,15 @@ export interface StatusOptions {
155
174
  * Omitted ⇒ only the job worktrees are reported.
156
175
  */
157
176
  mirrorPaths?: string[];
177
+ /**
178
+ * OPT-IN WRITE (`status --reconcile-locks`). `false`/omitted (the DEFAULT)
179
+ * keeps `status` strictly READ-ONLY: stale locks are classified and REPORTED
180
+ * via {@link StatusReport.staleLocks} and nothing on any arbiter is touched.
181
+ * `true` additionally RELEASES them. Not needed for routine convergence, the
182
+ * claim path already sweeps on every unit of work; this is the manual
183
+ * "drain them now" lever.
184
+ */
185
+ reconcileLocks?: boolean;
158
186
  /**
159
187
  * Sink for the fetch-first fall-back warning (ADR §5/§6): when a mirror's `main`
160
188
  * cannot be fetched, `status` warns through this and reads that mirror's
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAG1D,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAC,KAAK,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAsB,KAAK,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAsB,KAAK,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEnE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAGN,KAAK,aAAa,EAClB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,QAAQ,CAAC;IAChB,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC/B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACpC,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,UAAU,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC5B,oDAAoD;IACpD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,qFAAqF;IACrF,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAkE1E;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAgGzD"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/status.js CHANGED
@@ -5,7 +5,7 @@ import { resolveHarness } from './harness.js';
5
5
  import './pi-harness.js';
6
6
  import { fetchMirrorMainOrWarn } from './repo-mirror.js';
7
7
  import { formatArbiterStatus } from './arbiter.js';
8
- import { listItemLockEntries } from './item-lock.js';
8
+ import { classifyTerminalItemLocks, reconcileTerminalItemLocks, } from './item-lock.js';
9
9
  import { formatCwdSection, formatLockEntryLines } from './format.js';
10
10
  import { lintRefLedger, formatDuplicateWarnings, } from './ledger-lint.js';
11
11
  /**
@@ -42,22 +42,73 @@ export async function status(options) {
42
42
  // held (`active` = in-progress) AND stuck (`needs-attention`) entries + their
43
43
  // reasons/questions.
44
44
  const lockHeld = [];
45
+ const staleLocks = [];
45
46
  const ledgerDuplicates = [];
46
47
  for (const mirrorPath of options.mirrorPaths ?? []) {
47
48
  // Fetch-first (ADR §5/§6): refresh this mirror's `main` so the duplicate lint
48
49
  // reflects the remote truth. Never fatal — a failed fetch WARNS and falls back
49
50
  // to the mirror's last-known `main`.
50
51
  fetchMirrorMainOrWarn({ mirrorPath, warn: options.warn, env: options.env });
52
+ // CLASSIFY the mirror's held locks against its `main` (fix for the propose-path
53
+ // lock leak; observation
54
+ // `every-completed-task-leaves-its-lock-ref-reporting-in-progress`). A
55
+ // `complete --propose` KEEPS its lock held across the open PR and defers the
56
+ // release to the merge, an event no dorfl process is present for (no hook, no
57
+ // daemon), so the release never fired and every completed item reported
58
+ // in-progress for ever.
59
+ //
60
+ // `status` is READ-ONLY and stays that way: by DEFAULT we only classify, so a
61
+ // lock whose item has come to REST in a terminal folder on the mirror's `main`
62
+ // is reported as STALE rather than listed in-flight. The refs themselves are
63
+ // drained by the paths that already write on every unit of work (the claim
64
+ // path), or here under the explicit `--reconcile-locks` opt-in. An item on an
65
+ // OPEN PR (still in the pool on `main`) stays in-flight either way.
66
+ // Best-effort and never throws, any fault treats the lock as HELD.
67
+ //
68
+ // A hub mirror is a BARE clone with no `refs/remotes/*` namespace, so its copy
69
+ // of the arbiter's main is the plain `main` ref (the SAME ref
70
+ // `fetchMirrorMainOrWarn` above and `lintRefLedger` below read). Passing the
71
+ // default `origin/main` here would fail EVERY probe with `invalid object name`
72
+ // and silently classify every lock as in-flight.
73
+ const MIRROR_MAIN = { mainRef: 'main' };
74
+ let staleEntries = [];
75
+ let entries;
76
+ if (options.reconcileLocks === true) {
77
+ const reconciled = await reconcileTerminalItemLocks(mirrorPath, 'origin', options.env, MIRROR_MAIN);
78
+ if (reconciled.released.length > 0) {
79
+ options.warn?.(`${mirrorPath}: released ${reconciled.released.length} stale per-item ` +
80
+ 'lock(s) whose item is terminal on main (work landed; the ' +
81
+ `propose PR merged out-of-band): ${reconciled.released.join(', ')}`);
82
+ }
83
+ // Under an EXPLICIT drain request a refusal must be reported: the operator
84
+ // asked for these to go away, so silence would be a lie.
85
+ for (const e of reconciled.errors) {
86
+ options.warn?.(`${mirrorPath}: could not release '${e.entry}': ${e.message}`);
87
+ }
88
+ entries = reconciled.stillHeld;
89
+ }
90
+ else {
91
+ const classified = await classifyTerminalItemLocks(mirrorPath, 'origin', options.env, MIRROR_MAIN);
92
+ staleEntries = classified.terminal.map((l) => l.entry);
93
+ entries = classified.inFlight;
94
+ }
51
95
  // The PER-ITEM LOCK in-flight view (spec US #8): read the mirror's lock refs to
52
96
  // surface held (`active` = in-progress) and stuck (`needs-attention`) entries +
53
97
  // reasons/questions. A bare hub mirror's arbiter is its `origin` (the SAME
54
98
  // handle the `scan` held-slug subtraction reads). Best-effort: a fetch/read
55
99
  // fault yields an EMPTY list (see {@link listItemLockEntries}), so this
56
100
  // read-only view degrades to "no in-flight locks" rather than erroring.
57
- const entries = await listItemLockEntries(mirrorPath, 'origin', options.env);
101
+ // `entries` comes STRAIGHT from the classification above (its `inFlight`
102
+ // partition, or `stillHeld` after a sweep), so the stale ones are already
103
+ // excluded: finished work is not an in-flight hold, and listing it as one is
104
+ // the exact symptom being fixed. Reusing that result also avoids a SECOND
105
+ // `ls-remote` + fetch per mirror, and the TOCTOU window between two reads.
58
106
  if (entries.length > 0) {
59
107
  lockHeld.push({ repoPath: mirrorPath, entries });
60
108
  }
109
+ if (staleEntries.length > 0) {
110
+ staleLocks.push({ repoPath: mirrorPath, entries: staleEntries });
111
+ }
61
112
  // The one-slug-one-folder LINT (spec story 3): derive any slug residing in >1
62
113
  // status folder from the SAME freshly-fetched `main` ref, surfaced LOUDLY.
63
114
  const dups = lintRefLedger('main', mirrorPath, options.env);
@@ -66,11 +117,13 @@ export async function status(options) {
66
117
  }
67
118
  }
68
119
  lockHeld.sort((a, b) => a.repoPath.localeCompare(b.repoPath));
120
+ staleLocks.sort((a, b) => a.repoPath.localeCompare(b.repoPath));
69
121
  ledgerDuplicates.sort((a, b) => a.repoPath.localeCompare(b.repoPath));
70
122
  return {
71
123
  active,
72
124
  attention,
73
125
  lockHeld,
126
+ staleLocks,
74
127
  ledgerDuplicates,
75
128
  ...(options.arbiter ? { arbiter: options.arbiter } : {}),
76
129
  ...(options.cwd ? { cwd: options.cwd } : {}),
@@ -120,11 +173,17 @@ export function formatStatus(report) {
120
173
  const cwdLines = report.cwd !== undefined ? formatCwdSection(report.cwd) : [];
121
174
  const lockHeld = report.lockHeld ?? [];
122
175
  const lockCount = lockHeld.reduce((sum, r) => sum + r.entries.length, 0);
176
+ const staleLocks = report.staleLocks ?? [];
177
+ const staleCount = staleLocks.reduce((sum, r) => sum + r.entries.length, 0);
123
178
  const ledgerDuplicates = report.ledgerDuplicates ?? [];
124
179
  const dupCount = ledgerDuplicates.reduce((sum, r) => sum + r.duplicates.length, 0);
125
180
  if (report.active.length === 0 &&
126
181
  report.attention.length === 0 &&
127
182
  lockCount === 0 &&
183
+ // A repo whose ONLY locks are stale must not print "the work area is empty":
184
+ // that would turn the old "wrongly shown as in-progress" bug into a worse
185
+ // "not shown at all" one.
186
+ staleCount === 0 &&
128
187
  dupCount === 0 &&
129
188
  report.arbiter === undefined &&
130
189
  cwdLines.length === 0) {
@@ -170,6 +229,24 @@ export function formatStatus(report) {
170
229
  }
171
230
  }
172
231
  }
232
+ // STALE locks: finished work whose lock has not been released yet (the
233
+ // propose-path lock leak). Rendered as its OWN block and deliberately NOT under
234
+ // "In-flight locks" above, because reporting completed work as in-progress for
235
+ // ever was the symptom. `status` is read-only, so it names the state and how it
236
+ // clears rather than clearing it.
237
+ if (staleCount > 0) {
238
+ lines.push('');
239
+ lines.push(`Completed, lock not yet released (${staleCount}; the item is at rest on ` +
240
+ 'main, so this is NOT in flight):');
241
+ for (const repo of staleLocks) {
242
+ lines.push(` ${repo.repoPath}`);
243
+ for (const entry of repo.entries) {
244
+ lines.push(` ${entry}`);
245
+ }
246
+ }
247
+ lines.push(' These clear automatically on the next claim. To drain them now: ' +
248
+ '`dorfl status --reconcile-locks`.');
249
+ }
173
250
  // The one-slug-one-folder LINT (spec `ledger-integrity` story 3): WARN LOUDLY
174
251
  // about every slug residing in >1 status folder of a registered mirror's ledger
175
252
  // (a corrupt ledger — never a silent pass). A human must resolve each.
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dorfl",
3
- "version": "0.13.2",
3
+ "version": "0.13.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wighawag/dorfl.git",