dorfl 0.1.0 → 0.1.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/dist/advance-ci-template.d.ts +3 -3
- package/dist/advance-ci-template.js +1 -1
- package/dist/advance-ci-template.js.map +1 -1
- package/dist/advance-classify.d.ts +5 -5
- package/dist/advance-classify.d.ts.map +1 -1
- package/dist/advance-classify.js +4 -4
- package/dist/advance-drivers.d.ts +7 -7
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +5 -5
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-isolated.d.ts +3 -3
- package/dist/advance-isolated.d.ts.map +1 -1
- package/dist/advance-isolated.js +1 -1
- package/dist/advance-lifecycle-template.d.ts +2 -2
- package/dist/advance-lifecycle-template.js +9 -9
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-loop-driver.d.ts +3 -3
- package/dist/advance-loop-driver.d.ts.map +1 -1
- package/dist/advance-loop-driver.js +1 -1
- package/dist/advance-treeless-publish.d.ts +1 -1
- package/dist/advance.d.ts +11 -11
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +21 -21
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +1 -1
- package/dist/advancing-lock.js +5 -5
- package/dist/apply-decide.d.ts +2 -2
- package/dist/apply-decide.js +2 -2
- package/dist/apply-merge-action.d.ts +4 -4
- package/dist/apply-merge-action.js +2 -2
- package/dist/apply-persist.d.ts +5 -5
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +7 -7
- package/dist/apply-persist.js.map +1 -1
- package/dist/buildable-body.d.ts +14 -14
- package/dist/buildable-body.js +9 -9
- package/dist/claim-cas.d.ts +3 -3
- package/dist/claim-cas.js +1 -1
- package/dist/claim-cas.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +83 -77
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.d.ts +3 -3
- package/dist/close-job-template.js +8 -8
- package/dist/close-job.d.ts +8 -8
- package/dist/close-job.js +25 -25
- package/dist/close-job.js.map +1 -1
- package/dist/complete.d.ts +3 -3
- package/dist/complete.js +8 -8
- package/dist/complete.js.map +1 -1
- package/dist/concurrency.d.ts +1 -1
- package/dist/concurrency.js +1 -1
- package/dist/config.d.ts +32 -32
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts +1 -1
- package/dist/continue-branch.js +1 -1
- package/dist/cwd-section.js +1 -1
- package/dist/cwd-section.js.map +1 -1
- package/dist/decision-engine.d.ts +2 -2
- package/dist/do-autopick.d.ts +6 -6
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +5 -5
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +3 -3
- package/dist/do-config.js +3 -3
- package/dist/do-config.js.map +1 -1
- package/dist/do-remote-auto.d.ts +2 -2
- package/dist/do-remote-auto.js +1 -1
- package/dist/do.d.ts +25 -25
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +22 -22
- package/dist/do.js.map +1 -1
- package/dist/drop-source.d.ts +2 -2
- package/dist/env-config.js +8 -8
- package/dist/env-config.js.map +1 -1
- package/dist/format.js +3 -3
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +33 -39
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +18 -31
- package/dist/frontmatter.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +1 -1
- package/dist/install-ci-branch-protection.js +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
- package/dist/install-ci-capabilities/close-job.d.ts +1 -1
- package/dist/install-ci-capabilities/close-job.js +1 -1
- package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
- package/dist/install-ci-capabilities/example-noop.js +1 -1
- package/dist/install-ci-capabilities/intake.d.ts +2 -2
- package/dist/install-ci-capabilities/intake.js +2 -2
- package/dist/install-ci-capabilities/verify.d.ts +1 -1
- package/dist/install-ci-capabilities/verify.js +1 -1
- package/dist/install-ci-core.d.ts +3 -3
- package/dist/install-ci-core.js +2 -2
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +1 -1
- package/dist/install-ci-github.js +1 -1
- package/dist/install-ci.d.ts +1 -1
- package/dist/install-ci.js +4 -4
- package/dist/install-ci.js.map +1 -1
- package/dist/intake-event.d.ts +6 -6
- package/dist/intake-event.js +6 -6
- package/dist/intake-marker.d.ts +3 -3
- package/dist/intake-marker.d.ts.map +1 -1
- package/dist/intake-triage.d.ts +1 -1
- package/dist/intake-triage.js +2 -2
- package/dist/intake-trigger-template.d.ts +8 -8
- package/dist/intake-trigger-template.d.ts.map +1 -1
- package/dist/intake-trigger-template.js +16 -16
- package/dist/intake-trigger-template.js.map +1 -1
- package/dist/intake.d.ts +50 -50
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +70 -70
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +17 -17
- package/dist/integration-core.js +17 -17
- package/dist/integration-core.js.map +1 -1
- package/dist/isolation.d.ts +3 -3
- package/dist/issue-provider.d.ts +4 -4
- package/dist/issue-provider.js +1 -1
- package/dist/item-lock.d.ts +21 -21
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +16 -16
- package/dist/item-path.d.ts +2 -2
- package/dist/item-path.js +2 -2
- package/dist/ledger-lint.d.ts +9 -9
- package/dist/ledger-lint.js +9 -9
- package/dist/ledger-read.d.ts +57 -57
- package/dist/ledger-read.d.ts.map +1 -1
- package/dist/ledger-read.js +24 -24
- package/dist/ledger-read.js.map +1 -1
- package/dist/ledger-write.d.ts +2 -2
- package/dist/ledger-write.js +1 -1
- package/dist/lifecycle-gather.d.ts +1 -1
- package/dist/lifecycle-gather.js +16 -16
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +4 -4
- package/dist/lifecycle-pools.js +1 -1
- package/dist/merge-question-surfacer.d.ts +3 -3
- package/dist/merge-question-surfacer.js +2 -2
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/mint-adr.js +4 -4
- package/dist/mirror-pool-scan.d.ts +2 -2
- package/dist/mirror-pool-scan.js +3 -3
- package/dist/mirror-pool-scan.js.map +1 -1
- package/dist/needs-attention.d.ts +13 -13
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +11 -11
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +2 -2
- package/dist/placement.d.ts +6 -6
- package/dist/placement.js +2 -2
- package/dist/prd-to-spec.d.ts +15 -1
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +36 -14
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/prompt.d.ts +24 -24
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +29 -31
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +4 -4
- package/dist/protocol/REVIEW-PROTOCOL.md +1 -1
- package/dist/protocol/TASKING-PROTOCOL.md +12 -12
- package/dist/protocol/WORK-CONTRACT.md +39 -39
- package/dist/protocol/spec-template.md +1 -1
- package/dist/protocol/task-template.md +3 -3
- package/dist/readiness.d.ts +1 -1
- package/dist/recover-isolated.js +1 -1
- package/dist/repo-config.js +12 -12
- package/dist/repo-config.js.map +1 -1
- package/dist/review-gate.d.ts +3 -3
- package/dist/review-gate.d.ts.map +1 -1
- package/dist/review-gate.js +11 -10
- package/dist/review-gate.js.map +1 -1
- package/dist/review-verdict.d.ts +2 -2
- package/dist/review-verdict.d.ts.map +1 -1
- package/dist/review-verdict.js +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.js +5 -5
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +10 -10
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -8
- package/dist/scan.js.map +1 -1
- package/dist/select-order.d.ts +1 -1
- package/dist/select-priority.d.ts +12 -12
- package/dist/select-priority.d.ts.map +1 -1
- package/dist/select-priority.js +5 -5
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar.d.ts +2 -2
- package/dist/sidecar.js +2 -2
- package/dist/sidecar.js.map +1 -1
- package/dist/slug-namespace.d.ts +1 -1
- package/dist/slug-namespace.js +3 -3
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.js +2 -2
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts +1 -1
- package/dist/start.js +3 -3
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts +3 -3
- package/dist/status.js +4 -4
- package/dist/status.js.map +1 -1
- package/dist/surface-gate.d.ts +2 -2
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-persist.d.ts +2 -2
- package/dist/surface-persist.d.ts.map +1 -1
- package/dist/tasker-review-loop.d.ts +8 -8
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js +8 -8
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-eligibility.d.ts +21 -21
- package/dist/tasking-eligibility.d.ts.map +1 -1
- package/dist/tasking-eligibility.js +10 -10
- package/dist/tasking-lock.d.ts +8 -8
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +20 -21
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +33 -33
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +89 -88
- package/dist/tasking.js.map +1 -1
- package/dist/triage-gate.d.ts +1 -1
- package/dist/triage-persist.d.ts +5 -5
- package/dist/triage-persist.js +15 -15
- package/dist/triage-persist.js.map +1 -1
- package/dist/verify-workflow-template.d.ts +1 -1
- package/dist/verify-workflow-template.js +2 -2
- package/dist/work-layout.d.ts +9 -7
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +9 -7
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +1 -1
- package/package.json +1 -1
- package/src/advance-ci-template.ts +4 -4
- package/src/advance-classify.ts +5 -5
- package/src/advance-drivers.ts +10 -10
- package/src/advance-isolated.ts +3 -3
- package/src/advance-lifecycle-template.ts +9 -9
- package/src/advance-loop-driver.ts +3 -3
- package/src/advance-treeless-publish.ts +1 -1
- package/src/advance.ts +30 -30
- package/src/advancing-lock.ts +6 -6
- package/src/apply-decide.ts +2 -2
- package/src/apply-merge-action.ts +5 -5
- package/src/apply-persist.ts +8 -8
- package/src/buildable-body.ts +14 -14
- package/src/claim-cas.ts +4 -4
- package/src/cli.ts +94 -84
- package/src/close-job-template.ts +8 -8
- package/src/close-job.ts +26 -26
- package/src/complete.ts +11 -11
- package/src/concurrency.ts +1 -1
- package/src/config.ts +37 -37
- package/src/continue-branch.ts +1 -1
- package/src/cwd-section.ts +1 -1
- package/src/decision-engine.ts +3 -3
- package/src/do-autopick.ts +9 -9
- package/src/do-config.ts +6 -6
- package/src/do-remote-auto.ts +2 -2
- package/src/do.ts +49 -49
- package/src/drop-source.ts +2 -2
- package/src/env-config.ts +8 -8
- package/src/format.ts +3 -3
- package/src/frontmatter.ts +42 -60
- package/src/install-ci-branch-protection.ts +1 -1
- package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
- package/src/install-ci-capabilities/close-job.ts +1 -1
- package/src/install-ci-capabilities/example-noop.ts +1 -1
- package/src/install-ci-capabilities/intake.ts +2 -2
- package/src/install-ci-capabilities/verify.ts +1 -1
- package/src/install-ci-core.ts +4 -4
- package/src/install-ci-github.ts +1 -1
- package/src/install-ci.ts +4 -4
- package/src/intake-event.ts +6 -6
- package/src/intake-marker.ts +3 -3
- package/src/intake-triage.ts +2 -2
- package/src/intake-trigger-template.ts +17 -17
- package/src/intake.ts +97 -97
- package/src/integration-core.ts +35 -35
- package/src/isolation.ts +3 -3
- package/src/issue-provider.ts +4 -4
- package/src/item-lock.ts +21 -21
- package/src/item-path.ts +2 -2
- package/src/ledger-lint.ts +9 -9
- package/src/ledger-read.ts +81 -81
- package/src/ledger-write.ts +3 -3
- package/src/lifecycle-gather.ts +16 -16
- package/src/lifecycle-pools.ts +4 -4
- package/src/merge-question-surfacer.ts +4 -4
- package/src/mint-adr.ts +4 -4
- package/src/mirror-pool-scan.ts +5 -5
- package/src/needs-attention.ts +22 -22
- package/src/orphan-sidecar.ts +2 -2
- package/src/placement.ts +6 -6
- package/src/prd-to-spec.ts +51 -15
- package/src/prompt.ts +33 -35
- package/src/readiness.ts +1 -1
- package/src/recover-isolated.ts +1 -1
- package/src/repo-config.ts +12 -12
- package/src/review-gate.ts +12 -11
- package/src/review-verdict.ts +2 -2
- package/src/run.ts +6 -6
- package/src/scan.ts +15 -15
- package/src/select-order.ts +1 -1
- package/src/select-priority.ts +13 -13
- package/src/sidecar.ts +3 -3
- package/src/slug-namespace.ts +3 -3
- package/src/spec-complete.ts +2 -2
- package/src/start.ts +4 -4
- package/src/status.ts +7 -7
- package/src/surface-gate.ts +2 -2
- package/src/surface-persist.ts +2 -2
- package/src/tasker-review-loop.ts +15 -15
- package/src/tasking-eligibility.ts +21 -21
- package/src/tasking-lock.ts +27 -28
- package/src/tasking.ts +124 -123
- package/src/triage-gate.ts +1 -1
- package/src/triage-persist.ts +16 -16
- package/src/verify-workflow-template.ts +2 -2
- package/src/work-layout.ts +9 -7
- package/src/workspace.ts +1 -1
package/dist/item-lock.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type SidecarType } from './sidecar.js';
|
|
2
2
|
/**
|
|
3
|
-
* The **unified item-lock module** (
|
|
3
|
+
* The **unified item-lock module** (spec `ledger-status-per-item-lock-refs`, ADR
|
|
4
4
|
* `ledger-status-on-per-item-lock-refs`). The runner's ONE lock primitive: ONE
|
|
5
5
|
* lock per item, on a PER-ITEM hidden ref `refs/dorfl/lock/<entry>`,
|
|
6
6
|
* acquired by an ATOMIC create-only push and released by DELETING the ref, with a
|
|
@@ -12,12 +12,12 @@ import { type SidecarType } from './sidecar.js';
|
|
|
12
12
|
* It GENERALISES the green tracer that proved the dangerous core end-to-end on a
|
|
13
13
|
* bare `file://` arbiter (the tracer is now this file). The one production
|
|
14
14
|
* difference from the tracer is the IDENTITY SEAM: callers pass a NAMESPACED item
|
|
15
|
-
* identity (`task:<slug>` / `
|
|
15
|
+
* identity (`task:<slug>` / `spec:<slug>` / `observation:<slug>` / `obs:<slug>`,
|
|
16
16
|
* or a bare `<slug>` = task), and this module derives the type-encoded lock
|
|
17
17
|
* `<entry>` (`<type>-<slug>`) through {@link resolveSidecarIdentity} — the SAME
|
|
18
18
|
* single source of truth the sidecar (`work/questions/<type>-<slug>.md`) and the
|
|
19
19
|
* work branch (`work/<type>-<slug>`) already use. There is deliberately NO second
|
|
20
|
-
* identity scheme: a task, a
|
|
20
|
+
* identity scheme: a task, a spec,
|
|
21
21
|
* and an observation that share a slug get DISTINCT lock refs, and the SAME item
|
|
22
22
|
* under different actions shares ONE ref (so implement / task / advance on one
|
|
23
23
|
* item are mutually exclusive by construction).
|
|
@@ -57,7 +57,7 @@ export declare const LOCK_REF_PREFIX = "refs/dorfl/lock";
|
|
|
57
57
|
* (`<type>-<slug>`) from a NAMESPACED item identity, through the shared
|
|
58
58
|
* {@link resolveSidecarIdentity} resolver (the single source of truth, which the
|
|
59
59
|
* sidecar filename + the advancing-lock marker also key onto). Accepts the same
|
|
60
|
-
* forms as that resolver: `task:<slug>` / `
|
|
60
|
+
* forms as that resolver: `task:<slug>` / `spec:<slug>` / `observation:<slug>` /
|
|
61
61
|
* `obs:<slug>`, or a bare `<slug>` (= task). Acquire/release/read ALL key
|
|
62
62
|
* through THIS function, so there is one — and only one — addressing scheme.
|
|
63
63
|
*/
|
|
@@ -114,7 +114,7 @@ export interface ReleaseResult {
|
|
|
114
114
|
}
|
|
115
115
|
/**
|
|
116
116
|
* Outcome of an AMEND-style transition (mark-stuck / resume / requeue) — the
|
|
117
|
-
* lock-entry STATE MACHINE's interior moves (
|
|
117
|
+
* lock-entry STATE MACHINE's interior moves (spec `ledger-status-per-item-lock-refs`,
|
|
118
118
|
* the C8 lock-entry state machine in the design trail). Each is a single CAS on the
|
|
119
119
|
* held ref (no retry loop), so the verdict is definitive:
|
|
120
120
|
* - `transitioned` — we won the CAS; the entry now holds the target `(action, state)`.
|
|
@@ -150,7 +150,7 @@ export interface TransitionResult {
|
|
|
150
150
|
export declare function serialiseLockEntry(e: LockEntry): string;
|
|
151
151
|
export interface AcquireOptions {
|
|
152
152
|
/**
|
|
153
|
-
* The NAMESPACED item identity to lock (`task:<slug>` / `
|
|
153
|
+
* The NAMESPACED item identity to lock (`task:<slug>` / `spec:<slug>` /
|
|
154
154
|
* `observation:<slug>` / `obs:<slug>`, or a bare `<slug>` = task). Resolved to
|
|
155
155
|
* the type-encoded lock `<entry>` through {@link lockEntryFor}.
|
|
156
156
|
*/
|
|
@@ -196,7 +196,7 @@ export interface ReleaseHeldResult {
|
|
|
196
196
|
message: string;
|
|
197
197
|
}
|
|
198
198
|
/**
|
|
199
|
-
* GUARDED release for a runner that KNOWS it acquired and HELD the lock (
|
|
199
|
+
* GUARDED release for a runner that KNOWS it acquired and HELD the lock (spec
|
|
200
200
|
* `ledger-status-per-item-lock-refs` US #13): unlike {@link releaseItemLock} —
|
|
201
201
|
* whose `not-held` is a BENIGN idempotent case the complete/tasking/needs-attention
|
|
202
202
|
* callers tolerate (the body may predate the lock, or a crash-recovery may have
|
|
@@ -291,19 +291,19 @@ export declare function readItemLock(opts: ReleaseOptions): Promise<LockEntry |
|
|
|
291
291
|
* authoritative resting records the cross-substrate reconciliation reads. An
|
|
292
292
|
* item is TERMINAL on `main` iff ANY of these paths exists on `<arbiter>/main`.
|
|
293
293
|
* The won't-proceed terminal is PER-REGIME (the slug-collision correctness fix:
|
|
294
|
-
* a dropped task and a dropped
|
|
294
|
+
* a dropped task and a dropped spec sharing a slug used to collide on one
|
|
295
295
|
* bare-slug `work/dropped/<slug>.md`):
|
|
296
296
|
* - a TASK: `work/tasks/done/<slug>.md` (completed) OR
|
|
297
297
|
* `work/tasks/cancelled/<slug>.md` (the task regime's won't-proceed terminal).
|
|
298
|
-
* - a
|
|
299
|
-
* (the
|
|
298
|
+
* - a SPEC: `work/specs/tasked/<slug>.md` (tasked) OR `work/specs/dropped/<slug>.md`
|
|
299
|
+
* (the spec regime's won't-proceed terminal).
|
|
300
300
|
* - an OBSERVATION: NONE. A note has no durable terminal folder — it leaves by
|
|
301
301
|
* deletion (its absence, not a terminal record, is the end state). A promoted
|
|
302
|
-
* observation becomes a NEW task/
|
|
302
|
+
* observation becomes a NEW task/spec with its own ref.
|
|
303
303
|
*/
|
|
304
304
|
export declare function terminalMainPaths(type: SidecarType, slug: string): string[];
|
|
305
305
|
/** The outcome of a cross-substrate reconciliation of one item's lock against
|
|
306
|
-
* the authoritative `main` durable record (
|
|
306
|
+
* the authoritative `main` durable record (spec `ledger-status-per-item-lock-refs`
|
|
307
307
|
* US #9/#10; ADR `ledger-status-on-per-item-lock-refs`). */
|
|
308
308
|
export type ReconcileOutcome = 'cleared-stale' | 'kept-stuck' | 'kept-in-flight' | 'no-lock' | 'error';
|
|
309
309
|
export interface ReconcileResult {
|
|
@@ -312,19 +312,19 @@ export interface ReconcileResult {
|
|
|
312
312
|
entry: string;
|
|
313
313
|
ref: string;
|
|
314
314
|
/** Whether `<arbiter>/main` shows the item terminal (per {@link terminalMainPaths}:
|
|
315
|
-
* a task at `tasks/done`/`tasks/cancelled`, a
|
|
315
|
+
* a task at `tasks/done`/`tasks/cancelled`, a spec at `specs/tasked`/`specs/dropped`). */
|
|
316
316
|
terminalOnMain: boolean;
|
|
317
317
|
message: string;
|
|
318
318
|
}
|
|
319
319
|
/**
|
|
320
320
|
* Reconcile ONE item's per-item lock against the AUTHORITATIVE `main` durable
|
|
321
|
-
* record — the heart of complete's cross-substrate crash-safety (
|
|
321
|
+
* record — the heart of complete's cross-substrate crash-safety (spec
|
|
322
322
|
* `ledger-status-per-item-lock-refs` US #9/#10; ADR
|
|
323
323
|
* `ledger-status-on-per-item-lock-refs`; the design trail's Amendment 6).
|
|
324
324
|
*
|
|
325
325
|
* complete's order is hold lock → land the DURABLE `main` move FIRST → release
|
|
326
326
|
* the lock SECOND. A crash BETWEEN the move and the release leaves a
|
|
327
|
-
* terminal-on-`main` item (a completed/cancelled task or a tasked/dropped
|
|
327
|
+
* terminal-on-`main` item (a completed/cancelled task or a tasked/dropped spec,
|
|
328
328
|
* per {@link terminalMainPaths}) with a STILL-HELD lock — a stale lock with no
|
|
329
329
|
* in-flight work behind it. This is the recovery that converges it.
|
|
330
330
|
*
|
|
@@ -409,7 +409,7 @@ export interface LockReportEntry {
|
|
|
409
409
|
*/
|
|
410
410
|
reconcile: ReconcileOutcome;
|
|
411
411
|
}
|
|
412
|
-
/** The `gc --ledger` stuck/orphaned-lock REPORT (
|
|
412
|
+
/** The `gc --ledger` stuck/orphaned-lock REPORT (spec
|
|
413
413
|
* `ledger-status-per-item-lock-refs` US #14): every lingering per-item lock on the
|
|
414
414
|
* arbiter, each classified read-only against `main`. An EMPTY list = no locks held
|
|
415
415
|
* (an absent ref namespace reads as `[]`, the recoverable "all locks released"
|
|
@@ -418,7 +418,7 @@ export interface ItemLockReport {
|
|
|
418
418
|
locks: LockReportEntry[];
|
|
419
419
|
}
|
|
420
420
|
/**
|
|
421
|
-
* Build the `gc --ledger` stuck/orphaned-lock REPORT (
|
|
421
|
+
* Build the `gc --ledger` stuck/orphaned-lock REPORT (spec
|
|
422
422
|
* `ledger-status-per-item-lock-refs` US #12/#13/#14; ADR
|
|
423
423
|
* `ledger-status-on-per-item-lock-refs`): enumerate every per-item lock currently
|
|
424
424
|
* held on the arbiter ({@link listItemLockEntries} — held active + stuck, with
|
|
@@ -450,7 +450,7 @@ export declare function reportItemLocks(cwd: string, arbiter?: string, env?: Nod
|
|
|
450
450
|
*/
|
|
451
451
|
/**
|
|
452
452
|
* Does the `gc --ledger` lock report contain a lock that NEEDS HUMAN ATTENTION
|
|
453
|
-
* (
|
|
453
|
+
* (spec US#14/#21; ADR `ledger-status-on-per-item-lock-refs`: this surface is the
|
|
454
454
|
* STUCK / crash-orphaned lock, NOT every held one)? TRUE iff some lock is
|
|
455
455
|
* `kept-stuck` (terminal-on-`main` + stuck) or `cleared-stale`-eligible
|
|
456
456
|
* (terminal-on-`main` + a stale active orphan). A `kept-in-flight` (active,
|
|
@@ -504,7 +504,7 @@ export interface ReapReport {
|
|
|
504
504
|
lost: number;
|
|
505
505
|
}
|
|
506
506
|
/**
|
|
507
|
-
* The OPT-IN `gc --ledger --reap-stale-locks` SWEEP (
|
|
507
|
+
* The OPT-IN `gc --ledger --reap-stale-locks` SWEEP (spec
|
|
508
508
|
* `ledger-status-per-item-lock-refs` US #14): a human asserting "clear the dead
|
|
509
509
|
* TERMINAL locks now", so one command sweeps every orphaned terminal lock instead
|
|
510
510
|
* of N hand-run `release-lock`s. It is the WRITE twin of {@link reportItemLocks}
|
|
@@ -560,7 +560,7 @@ export declare function itemFromLockEntry(entry: string): string;
|
|
|
560
560
|
export declare function listItemLocks(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<string[]>;
|
|
561
561
|
/**
|
|
562
562
|
* Read the FULL lock entries currently held on the arbiter — the `status`/`scan`
|
|
563
|
-
* in-flight read path (
|
|
563
|
+
* in-flight read path (spec `ledger-status-per-item-lock-refs` US #8; task
|
|
564
564
|
* `needs-attention-as-stuck-lock-state`). One fetch of the lock refs, then read
|
|
565
565
|
* each held entry's `lock.md` blob, returning the parsed {@link LockEntry} for
|
|
566
566
|
* every ref (so a caller can surface `active` (in-progress) and `stuck`
|
|
@@ -572,7 +572,7 @@ export declare function listItemLocks(cwd: string, arbiter?: string, env?: NodeJ
|
|
|
572
572
|
export declare function listItemLockEntries(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<LockEntry[]>;
|
|
573
573
|
/**
|
|
574
574
|
* List the TASK slugs currently lock-held on the arbiter — the held-slug set the
|
|
575
|
-
* `ready/` pool readers SUBTRACT (
|
|
575
|
+
* `ready/` pool readers SUBTRACT (spec `ledger-status-per-item-lock-refs` US #15;
|
|
576
576
|
* task `claim-acquires-unified-lock-no-body-move`). Enumerates {@link listItemLocks}
|
|
577
577
|
* and keeps only the `task-<slug>` entries (a prd/observation lock does not gate
|
|
578
578
|
* the TASK pool), mapping each to its bare `<slug>`.
|
package/dist/item-lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-lock.d.ts","sourceRoot":"","sources":["../src/item-lock.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"item-lock.d.ts","sourceRoot":"","sources":["../src/item-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/item-lock.js
CHANGED
|
@@ -3,7 +3,7 @@ import { runAsync } from './git.js';
|
|
|
3
3
|
import { resolveSidecarIdentity } from './sidecar.js';
|
|
4
4
|
import { workItemRel } from './work-layout.js';
|
|
5
5
|
/**
|
|
6
|
-
* The **unified item-lock module** (
|
|
6
|
+
* The **unified item-lock module** (spec `ledger-status-per-item-lock-refs`, ADR
|
|
7
7
|
* `ledger-status-on-per-item-lock-refs`). The runner's ONE lock primitive: ONE
|
|
8
8
|
* lock per item, on a PER-ITEM hidden ref `refs/dorfl/lock/<entry>`,
|
|
9
9
|
* acquired by an ATOMIC create-only push and released by DELETING the ref, with a
|
|
@@ -15,12 +15,12 @@ import { workItemRel } from './work-layout.js';
|
|
|
15
15
|
* It GENERALISES the green tracer that proved the dangerous core end-to-end on a
|
|
16
16
|
* bare `file://` arbiter (the tracer is now this file). The one production
|
|
17
17
|
* difference from the tracer is the IDENTITY SEAM: callers pass a NAMESPACED item
|
|
18
|
-
* identity (`task:<slug>` / `
|
|
18
|
+
* identity (`task:<slug>` / `spec:<slug>` / `observation:<slug>` / `obs:<slug>`,
|
|
19
19
|
* or a bare `<slug>` = task), and this module derives the type-encoded lock
|
|
20
20
|
* `<entry>` (`<type>-<slug>`) through {@link resolveSidecarIdentity} — the SAME
|
|
21
21
|
* single source of truth the sidecar (`work/questions/<type>-<slug>.md`) and the
|
|
22
22
|
* work branch (`work/<type>-<slug>`) already use. There is deliberately NO second
|
|
23
|
-
* identity scheme: a task, a
|
|
23
|
+
* identity scheme: a task, a spec,
|
|
24
24
|
* and an observation that share a slug get DISTINCT lock refs, and the SAME item
|
|
25
25
|
* under different actions shares ONE ref (so implement / task / advance on one
|
|
26
26
|
* item are mutually exclusive by construction).
|
|
@@ -60,7 +60,7 @@ export const LOCK_REF_PREFIX = 'refs/dorfl/lock';
|
|
|
60
60
|
* (`<type>-<slug>`) from a NAMESPACED item identity, through the shared
|
|
61
61
|
* {@link resolveSidecarIdentity} resolver (the single source of truth, which the
|
|
62
62
|
* sidecar filename + the advancing-lock marker also key onto). Accepts the same
|
|
63
|
-
* forms as that resolver: `task:<slug>` / `
|
|
63
|
+
* forms as that resolver: `task:<slug>` / `spec:<slug>` / `observation:<slug>` /
|
|
64
64
|
* `obs:<slug>`, or a bare `<slug>` (= task). Acquire/release/read ALL key
|
|
65
65
|
* through THIS function, so there is one — and only one — addressing scheme.
|
|
66
66
|
*/
|
|
@@ -259,7 +259,7 @@ export async function releaseItemLock(opts) {
|
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
261
|
/**
|
|
262
|
-
* GUARDED release for a runner that KNOWS it acquired and HELD the lock (
|
|
262
|
+
* GUARDED release for a runner that KNOWS it acquired and HELD the lock (spec
|
|
263
263
|
* `ledger-status-per-item-lock-refs` US #13): unlike {@link releaseItemLock} —
|
|
264
264
|
* whose `not-held` is a BENIGN idempotent case the complete/tasking/needs-attention
|
|
265
265
|
* callers tolerate (the body may predate the lock, or a crash-recovery may have
|
|
@@ -596,15 +596,15 @@ export async function readItemLock(opts) {
|
|
|
596
596
|
* authoritative resting records the cross-substrate reconciliation reads. An
|
|
597
597
|
* item is TERMINAL on `main` iff ANY of these paths exists on `<arbiter>/main`.
|
|
598
598
|
* The won't-proceed terminal is PER-REGIME (the slug-collision correctness fix:
|
|
599
|
-
* a dropped task and a dropped
|
|
599
|
+
* a dropped task and a dropped spec sharing a slug used to collide on one
|
|
600
600
|
* bare-slug `work/dropped/<slug>.md`):
|
|
601
601
|
* - a TASK: `work/tasks/done/<slug>.md` (completed) OR
|
|
602
602
|
* `work/tasks/cancelled/<slug>.md` (the task regime's won't-proceed terminal).
|
|
603
|
-
* - a
|
|
604
|
-
* (the
|
|
603
|
+
* - a SPEC: `work/specs/tasked/<slug>.md` (tasked) OR `work/specs/dropped/<slug>.md`
|
|
604
|
+
* (the spec regime's won't-proceed terminal).
|
|
605
605
|
* - an OBSERVATION: NONE. A note has no durable terminal folder — it leaves by
|
|
606
606
|
* deletion (its absence, not a terminal record, is the end state). A promoted
|
|
607
|
-
* observation becomes a NEW task/
|
|
607
|
+
* observation becomes a NEW task/spec with its own ref.
|
|
608
608
|
*/
|
|
609
609
|
export function terminalMainPaths(type, slug) {
|
|
610
610
|
const file = `${slug}.md`;
|
|
@@ -625,13 +625,13 @@ export function terminalMainPaths(type, slug) {
|
|
|
625
625
|
}
|
|
626
626
|
/**
|
|
627
627
|
* Reconcile ONE item's per-item lock against the AUTHORITATIVE `main` durable
|
|
628
|
-
* record — the heart of complete's cross-substrate crash-safety (
|
|
628
|
+
* record — the heart of complete's cross-substrate crash-safety (spec
|
|
629
629
|
* `ledger-status-per-item-lock-refs` US #9/#10; ADR
|
|
630
630
|
* `ledger-status-on-per-item-lock-refs`; the design trail's Amendment 6).
|
|
631
631
|
*
|
|
632
632
|
* complete's order is hold lock → land the DURABLE `main` move FIRST → release
|
|
633
633
|
* the lock SECOND. A crash BETWEEN the move and the release leaves a
|
|
634
|
-
* terminal-on-`main` item (a completed/cancelled task or a tasked/dropped
|
|
634
|
+
* terminal-on-`main` item (a completed/cancelled task or a tasked/dropped spec,
|
|
635
635
|
* per {@link terminalMainPaths}) with a STILL-HELD lock — a stale lock with no
|
|
636
636
|
* in-flight work behind it. This is the recovery that converges it.
|
|
637
637
|
*
|
|
@@ -881,7 +881,7 @@ export async function classifyItemLockAgainstMain(opts) {
|
|
|
881
881
|
}
|
|
882
882
|
}
|
|
883
883
|
/**
|
|
884
|
-
* Build the `gc --ledger` stuck/orphaned-lock REPORT (
|
|
884
|
+
* Build the `gc --ledger` stuck/orphaned-lock REPORT (spec
|
|
885
885
|
* `ledger-status-per-item-lock-refs` US #12/#13/#14; ADR
|
|
886
886
|
* `ledger-status-on-per-item-lock-refs`): enumerate every per-item lock currently
|
|
887
887
|
* held on the arbiter ({@link listItemLockEntries} — held active + stuck, with
|
|
@@ -929,7 +929,7 @@ export async function reportItemLocks(cwd, arbiter = 'origin', env) {
|
|
|
929
929
|
*/
|
|
930
930
|
/**
|
|
931
931
|
* Does the `gc --ledger` lock report contain a lock that NEEDS HUMAN ATTENTION
|
|
932
|
-
* (
|
|
932
|
+
* (spec US#14/#21; ADR `ledger-status-on-per-item-lock-refs`: this surface is the
|
|
933
933
|
* STUCK / crash-orphaned lock, NOT every held one)? TRUE iff some lock is
|
|
934
934
|
* `kept-stuck` (terminal-on-`main` + stuck) or `cleared-stale`-eligible
|
|
935
935
|
* (terminal-on-`main` + a stale active orphan). A `kept-in-flight` (active,
|
|
@@ -979,7 +979,7 @@ function reconcileNote(reconcile) {
|
|
|
979
979
|
}
|
|
980
980
|
}
|
|
981
981
|
/**
|
|
982
|
-
* The OPT-IN `gc --ledger --reap-stale-locks` SWEEP (
|
|
982
|
+
* The OPT-IN `gc --ledger --reap-stale-locks` SWEEP (spec
|
|
983
983
|
* `ledger-status-per-item-lock-refs` US #14): a human asserting "clear the dead
|
|
984
984
|
* TERMINAL locks now", so one command sweeps every orphaned terminal lock instead
|
|
985
985
|
* of N hand-run `release-lock`s. It is the WRITE twin of {@link reportItemLocks}
|
|
@@ -1186,7 +1186,7 @@ export async function listItemLocks(cwd, arbiter = 'origin', env) {
|
|
|
1186
1186
|
}
|
|
1187
1187
|
/**
|
|
1188
1188
|
* Read the FULL lock entries currently held on the arbiter — the `status`/`scan`
|
|
1189
|
-
* in-flight read path (
|
|
1189
|
+
* in-flight read path (spec `ledger-status-per-item-lock-refs` US #8; task
|
|
1190
1190
|
* `needs-attention-as-stuck-lock-state`). One fetch of the lock refs, then read
|
|
1191
1191
|
* each held entry's `lock.md` blob, returning the parsed {@link LockEntry} for
|
|
1192
1192
|
* every ref (so a caller can surface `active` (in-progress) and `stuck`
|
|
@@ -1231,7 +1231,7 @@ export async function listItemLockEntries(cwd, arbiter = 'origin', env) {
|
|
|
1231
1231
|
}
|
|
1232
1232
|
/**
|
|
1233
1233
|
* List the TASK slugs currently lock-held on the arbiter — the held-slug set the
|
|
1234
|
-
* `ready/` pool readers SUBTRACT (
|
|
1234
|
+
* `ready/` pool readers SUBTRACT (spec `ledger-status-per-item-lock-refs` US #15;
|
|
1235
1235
|
* task `claim-acquires-unified-lock-no-body-move`). Enumerates {@link listItemLocks}
|
|
1236
1236
|
* and keeps only the `task-<slug>` entries (a prd/observation lock does not gate
|
|
1237
1237
|
* the TASK pool), mapping each to its bare `<slug>`.
|
package/dist/item-path.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ import type { WorkFolderKey } from './work-layout.js';
|
|
|
20
20
|
* (`tasks-backlog`, `prds-proposed`) on purpose: a concurrent `promote` may have
|
|
21
21
|
* just `git mv`'d the item from staging into the pool between an apply's CAPTURE
|
|
22
22
|
* and WRITE, and the apply must resolve to the post-move path — the whole point of
|
|
23
|
-
* folder-agnostic apply (F3a of
|
|
23
|
+
* folder-agnostic apply (F3a of spec `staging-surface-and-apply-promote-safety`).
|
|
24
24
|
* Terminal-only folders (`cancelled`, `prds-dropped`, `needs-attention`) are NOT
|
|
25
25
|
* here — once an item has reached a terminal, the apply is OVER, and a re-resolve
|
|
26
26
|
* into a terminal would mean the item has effectively vanished from the active
|
|
@@ -40,7 +40,7 @@ export declare const APPLY_LIFECYCLE_FOLDERS: Record<SidecarType, readonly WorkF
|
|
|
40
40
|
* move) — the apply rung then exits CLEAN (no commit, no ghost file), routed as the
|
|
41
41
|
* `vanished` outcome.
|
|
42
42
|
*
|
|
43
|
-
* This is the F3a fix from
|
|
43
|
+
* This is the F3a fix from spec `staging-surface-and-apply-promote-safety`: the
|
|
44
44
|
* sidecar is already identity-keyed and folder-agnostic; the item path is now the
|
|
45
45
|
* same. A concurrent `promote` that `git mv`'d the item out from under a captured
|
|
46
46
|
* path can no longer cause a stale-path write.
|
package/dist/item-path.js
CHANGED
|
@@ -22,7 +22,7 @@ import { resolveSidecarIdentity } from './sidecar.js';
|
|
|
22
22
|
* (`tasks-backlog`, `prds-proposed`) on purpose: a concurrent `promote` may have
|
|
23
23
|
* just `git mv`'d the item from staging into the pool between an apply's CAPTURE
|
|
24
24
|
* and WRITE, and the apply must resolve to the post-move path — the whole point of
|
|
25
|
-
* folder-agnostic apply (F3a of
|
|
25
|
+
* folder-agnostic apply (F3a of spec `staging-surface-and-apply-promote-safety`).
|
|
26
26
|
* Terminal-only folders (`cancelled`, `prds-dropped`, `needs-attention`) are NOT
|
|
27
27
|
* here — once an item has reached a terminal, the apply is OVER, and a re-resolve
|
|
28
28
|
* into a terminal would mean the item has effectively vanished from the active
|
|
@@ -48,7 +48,7 @@ export const APPLY_LIFECYCLE_FOLDERS = {
|
|
|
48
48
|
* move) — the apply rung then exits CLEAN (no commit, no ghost file), routed as the
|
|
49
49
|
* `vanished` outcome.
|
|
50
50
|
*
|
|
51
|
-
* This is the F3a fix from
|
|
51
|
+
* This is the F3a fix from spec `staging-surface-and-apply-promote-safety`: the
|
|
52
52
|
* sidecar is already identity-keyed and folder-agnostic; the item path is now the
|
|
53
53
|
* same. A concurrent `promote` that `git mv`'d the item out from under a captured
|
|
54
54
|
* path can no longer cause a stale-path write.
|
package/dist/ledger-lint.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type LedgerStatusFolder } from './work-layout.js';
|
|
2
2
|
/**
|
|
3
|
-
* The **one-slug-one-folder LINT** over the `work/` lifecycle ledger (
|
|
3
|
+
* The **one-slug-one-folder LINT** over the `work/` lifecycle ledger (spec
|
|
4
4
|
* `ledger-integrity`, story 3 — the READ-side belt-and-suspenders for defect 1).
|
|
5
5
|
*
|
|
6
6
|
* `work/` IS the ledger: a task's STATUS is the FOLDER its single `.md` lives in
|
|
@@ -27,14 +27,14 @@ import { type LedgerStatusFolder } from './work-layout.js';
|
|
|
27
27
|
* The `work/` STATUS folders a task's ledger file can rest in — the
|
|
28
28
|
* one-slug-one-folder set this lint is asserted over (WORK-CONTRACT.md
|
|
29
29
|
* "status = the folder"). After the capstone cut-over (task
|
|
30
|
-
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`,
|
|
30
|
+
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`, spec
|
|
31
31
|
* `ledger-status-per-item-lock-refs`; ADR `ledger-status-on-per-item-lock-refs`)
|
|
32
32
|
* the ONLY `work/` moves on `main` are the DURABLE RESTING transitions, so a
|
|
33
33
|
* task's ledger file can rest only in the DURABLE set: the pool `backlog/`, the
|
|
34
34
|
* terminal `done/`, and the task regime's PER-REGIME "won't-proceed" terminal
|
|
35
|
-
* `tasks/cancelled/` (the per-regime split of the previous shared `dropped/`,
|
|
35
|
+
* `tasks/cancelled/` (the per-regime split of the previous shared `dropped/`, spec
|
|
36
36
|
* `folder-taxonomy-reorg-and-rename` US #10; the specific REASON lives in the item
|
|
37
|
-
* BODY as a `reason:` value). The
|
|
37
|
+
* BODY as a `reason:` value). The spec regime's terminal `specs/dropped/` is a
|
|
38
38
|
* SEPARATE namespace and is NOT a task-status folder. The transient
|
|
39
39
|
* `in-progress`/`needs-attention`/`tasking`/
|
|
40
40
|
* `advancing` are GONE from `main`'s tree — they are per-item lock-ref state
|
|
@@ -45,11 +45,11 @@ import { type LedgerStatusFolder } from './work-layout.js';
|
|
|
45
45
|
* `cancelled`). A read-side lint surfaces a slug that ends up in `tasks/cancelled/`
|
|
46
46
|
* AND another status folder, so the lint covers all three.
|
|
47
47
|
*
|
|
48
|
-
* The capture buckets (`ideas`/`observations`/`findings`) and the
|
|
49
|
-
* (`
|
|
50
|
-
* are "exempt from status = folder"; the
|
|
48
|
+
* The capture buckets (`ideas`/`observations`/`findings`) and the spec-flow folders
|
|
49
|
+
* (`specs/ready`/`specs/tasked`) are NOT task-status folders (WORK-CONTRACT.md: the buckets
|
|
50
|
+
* are "exempt from status = folder"; the spec folders carry prds, a separate
|
|
51
51
|
* namespace) — they are deliberately EXCLUDED so a slug that legitimately has both
|
|
52
|
-
* a task and a same-named note/
|
|
52
|
+
* a task and a same-named note/spec is never a false positive.
|
|
53
53
|
*/
|
|
54
54
|
export { LEDGER_STATUS_FOLDERS, type LedgerStatusFolder } from './work-layout.js';
|
|
55
55
|
/** One slug found in more than one status folder — the corruption to surface. */
|
|
@@ -103,7 +103,7 @@ export interface LedgerSweepResult {
|
|
|
103
103
|
duplicates: DuplicateSlug[];
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* The `gc`-STYLE ledger SWEEP (
|
|
106
|
+
* The `gc`-STYLE ledger SWEEP (spec story 3's belt-and-suspenders): on demand,
|
|
107
107
|
* REPORT every slug present in more than one status folder of a LOCAL `work/`
|
|
108
108
|
* ledger, naming the folders and the CANDIDATE canonical folder — and NEVER
|
|
109
109
|
* auto-delete. A human confirms the cleanup (keep the canonical copy, delete the
|
package/dist/ledger-lint.js
CHANGED
|
@@ -4,7 +4,7 @@ import { parseFrontmatter } from './frontmatter.js';
|
|
|
4
4
|
import { run } from './git.js';
|
|
5
5
|
import { LEDGER_STATUS_FOLDERS, workFolderName, workFolderPath, workFolderPrefix, isWorkItemFile, } from './work-layout.js';
|
|
6
6
|
/**
|
|
7
|
-
* The **one-slug-one-folder LINT** over the `work/` lifecycle ledger (
|
|
7
|
+
* The **one-slug-one-folder LINT** over the `work/` lifecycle ledger (spec
|
|
8
8
|
* `ledger-integrity`, story 3 — the READ-side belt-and-suspenders for defect 1).
|
|
9
9
|
*
|
|
10
10
|
* `work/` IS the ledger: a task's STATUS is the FOLDER its single `.md` lives in
|
|
@@ -31,14 +31,14 @@ import { LEDGER_STATUS_FOLDERS, workFolderName, workFolderPath, workFolderPrefix
|
|
|
31
31
|
* The `work/` STATUS folders a task's ledger file can rest in — the
|
|
32
32
|
* one-slug-one-folder set this lint is asserted over (WORK-CONTRACT.md
|
|
33
33
|
* "status = the folder"). After the capstone cut-over (task
|
|
34
|
-
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`,
|
|
34
|
+
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`, spec
|
|
35
35
|
* `ledger-status-per-item-lock-refs`; ADR `ledger-status-on-per-item-lock-refs`)
|
|
36
36
|
* the ONLY `work/` moves on `main` are the DURABLE RESTING transitions, so a
|
|
37
37
|
* task's ledger file can rest only in the DURABLE set: the pool `backlog/`, the
|
|
38
38
|
* terminal `done/`, and the task regime's PER-REGIME "won't-proceed" terminal
|
|
39
|
-
* `tasks/cancelled/` (the per-regime split of the previous shared `dropped/`,
|
|
39
|
+
* `tasks/cancelled/` (the per-regime split of the previous shared `dropped/`, spec
|
|
40
40
|
* `folder-taxonomy-reorg-and-rename` US #10; the specific REASON lives in the item
|
|
41
|
-
* BODY as a `reason:` value). The
|
|
41
|
+
* BODY as a `reason:` value). The spec regime's terminal `specs/dropped/` is a
|
|
42
42
|
* SEPARATE namespace and is NOT a task-status folder. The transient
|
|
43
43
|
* `in-progress`/`needs-attention`/`tasking`/
|
|
44
44
|
* `advancing` are GONE from `main`'s tree — they are per-item lock-ref state
|
|
@@ -49,11 +49,11 @@ import { LEDGER_STATUS_FOLDERS, workFolderName, workFolderPath, workFolderPrefix
|
|
|
49
49
|
* `cancelled`). A read-side lint surfaces a slug that ends up in `tasks/cancelled/`
|
|
50
50
|
* AND another status folder, so the lint covers all three.
|
|
51
51
|
*
|
|
52
|
-
* The capture buckets (`ideas`/`observations`/`findings`) and the
|
|
53
|
-
* (`
|
|
54
|
-
* are "exempt from status = folder"; the
|
|
52
|
+
* The capture buckets (`ideas`/`observations`/`findings`) and the spec-flow folders
|
|
53
|
+
* (`specs/ready`/`specs/tasked`) are NOT task-status folders (WORK-CONTRACT.md: the buckets
|
|
54
|
+
* are "exempt from status = folder"; the spec folders carry prds, a separate
|
|
55
55
|
* namespace) — they are deliberately EXCLUDED so a slug that legitimately has both
|
|
56
|
-
* a task and a same-named note/
|
|
56
|
+
* a task and a same-named note/spec is never a false positive.
|
|
57
57
|
*/
|
|
58
58
|
export { LEDGER_STATUS_FOLDERS } from './work-layout.js';
|
|
59
59
|
/**
|
|
@@ -204,7 +204,7 @@ export function formatDuplicateWarnings(duplicates) {
|
|
|
204
204
|
return lines;
|
|
205
205
|
}
|
|
206
206
|
/**
|
|
207
|
-
* The `gc`-STYLE ledger SWEEP (
|
|
207
|
+
* The `gc`-STYLE ledger SWEEP (spec story 3's belt-and-suspenders): on demand,
|
|
208
208
|
* REPORT every slug present in more than one status folder of a LOCAL `work/`
|
|
209
209
|
* ledger, naming the folders and the CANDIDATE canonical folder — and NEVER
|
|
210
210
|
* auto-delete. A human confirms the cleanup (keep the canonical copy, delete the
|