@on-par/factory-core 0.9.28-next.7 → 0.9.28-next.8

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.
@@ -0,0 +1,62 @@
1
+ import { type QueueReleaseOutcome } from './github-queue.js';
2
+ import type { LinearTrackerConfig } from '../config/tracker-section.js';
3
+ import { type WorkKey } from '../work/work-key.js';
4
+ export declare const LINEAR_LEASE_KIND = "factory-claim-lease";
5
+ export interface LinearClaimLease {
6
+ kind: typeof LINEAR_LEASE_KIND;
7
+ claimantId: string;
8
+ /** epoch ms */
9
+ expiresAt: number;
10
+ }
11
+ export interface LinearIssueLabelRef {
12
+ id: string;
13
+ name: string;
14
+ }
15
+ export interface LinearClaimedIssue {
16
+ id: string;
17
+ identifier: string;
18
+ labels: LinearIssueLabelRef[];
19
+ /** The factory-owned lease attachment, when present; metadata is untrusted. */
20
+ lease?: {
21
+ attachmentId: string;
22
+ metadata: unknown;
23
+ };
24
+ }
25
+ export interface LinearQueueLifecycleClient {
26
+ findIssue(identifier: string): Promise<LinearClaimedIssue | null>;
27
+ /** Every issue in the mapped project carrying a factory lease attachment. */
28
+ listLeasedIssues(): Promise<LinearClaimedIssue[]>;
29
+ ensureLabel(name: string): Promise<string>;
30
+ addLabel(issueId: string, labelId: string): Promise<void>;
31
+ removeLabel(issueId: string, labelId: string): Promise<void>;
32
+ moveToState(issueId: string, stateName: string): Promise<void>;
33
+ addComment(issueId: string, body: string): Promise<void>;
34
+ /** Creates or replaces the factory lease attachment on the issue with this metadata. */
35
+ upsertLeaseAttachment(issueId: string, lease: LinearClaimLease): Promise<void>;
36
+ deleteAttachment(attachmentId: string): Promise<void>;
37
+ }
38
+ export interface LinearStaleClaimRelease {
39
+ key: WorkKey;
40
+ claimantId: string;
41
+ expiresAt: number;
42
+ released: boolean;
43
+ outcome: 'released' | 'failed';
44
+ detail?: string;
45
+ }
46
+ export interface LinearQueueLifecycle {
47
+ release(key: WorkKey, outcome?: QueueReleaseOutcome, reason?: string): Promise<void>;
48
+ heartbeat(key: WorkKey): Promise<boolean>;
49
+ reap(): Promise<LinearStaleClaimRelease[]>;
50
+ }
51
+ export interface LinearQueueLifecycleOptions {
52
+ client: LinearQueueLifecycleClient;
53
+ linear: LinearTrackerConfig;
54
+ /** Receives one line per failed Linear write; required so a failure is never silent. */
55
+ warn: (msg: string) => void;
56
+ claimantId?: string;
57
+ leaseMs?: number;
58
+ now?: () => number;
59
+ }
60
+ export declare function parseLinearClaimLease(metadata: unknown): LinearClaimLease | null;
61
+ export declare function createLinearQueueLifecycle(options: LinearQueueLifecycleOptions): LinearQueueLifecycle;
62
+ //# sourceMappingURL=linear-queue-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-queue-lifecycle.d.ts","sourceRoot":"","sources":["../../src/queue/linear-queue-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ // packages/core/src/queue/linear-queue-lifecycle.ts — Linear queue release, park, lease heartbeat and reap (ADR-0173, #3893).
2
+ import { z } from 'zod';
3
+ import { claimedByLabel, DEFAULT_CLAIM_LEASE_MS, defaultClaimantId, PARKED_LABEL, } from './github-queue.js';
4
+ import { toWorkKey } from '../work/work-key.js';
5
+ export const LINEAR_LEASE_KIND = 'factory-claim-lease';
6
+ const LeaseSchema = z.object({
7
+ kind: z.literal(LINEAR_LEASE_KIND),
8
+ claimantId: z.string().min(1),
9
+ expiresAt: z.number(),
10
+ });
11
+ export function parseLinearClaimLease(metadata) {
12
+ const parsed = LeaseSchema.safeParse(metadata);
13
+ return parsed.success ? parsed.data : null;
14
+ }
15
+ function messageOf(err) {
16
+ return err instanceof Error ? err.message : String(err);
17
+ }
18
+ export function createLinearQueueLifecycle(options) {
19
+ const { client, linear, warn } = options;
20
+ const claimantId = options.claimantId ?? defaultClaimantId();
21
+ const leaseMs = options.leaseMs ?? DEFAULT_CLAIM_LEASE_MS;
22
+ const now = options.now ?? Date.now;
23
+ const me = claimedByLabel(claimantId);
24
+ let lastError;
25
+ async function attempt(op, identifier, fn) {
26
+ try {
27
+ await fn();
28
+ return true;
29
+ }
30
+ catch (err) {
31
+ lastError = messageOf(err);
32
+ warn(`linear queue: ${op} on ${identifier} failed: ${lastError}`);
33
+ return false;
34
+ }
35
+ }
36
+ async function freeClaim(issue, claimLabel, leaseAttachmentId) {
37
+ let ok = true;
38
+ const label = issue.labels.find((l) => l.name === claimLabel);
39
+ if (label)
40
+ ok = (await attempt('claim label removal', issue.identifier, () => client.removeLabel(issue.id, label.id))) && ok;
41
+ if (leaseAttachmentId !== undefined) {
42
+ ok = (await attempt('lease removal', issue.identifier, () => client.deleteAttachment(leaseAttachmentId))) && ok;
43
+ }
44
+ return ok;
45
+ }
46
+ async function release(key, outcome = 'queued', reason) {
47
+ let issue;
48
+ try {
49
+ issue = await client.findIssue(key);
50
+ }
51
+ catch (err) {
52
+ warn(`linear queue: release of ${key}: lookup failed: ${messageOf(err)}`);
53
+ return;
54
+ }
55
+ if (!issue) {
56
+ warn(`linear queue: release of ${key}: issue not found`);
57
+ return;
58
+ }
59
+ const target = issue;
60
+ const ownLease = parseLinearClaimLease(target.lease?.metadata)?.claimantId === claimantId;
61
+ const hasLabel = target.labels.some((l) => l.name === me);
62
+ if (!ownLease && !hasLabel)
63
+ return;
64
+ await freeClaim(target, me, ownLease ? target.lease?.attachmentId : undefined);
65
+ switch (outcome) {
66
+ case 'queued':
67
+ await attempt('move to ready', key, () => client.moveToState(target.id, linear.states.ready));
68
+ break;
69
+ case 'parked': {
70
+ await attempt('parked label', key, async () => {
71
+ const labelId = await client.ensureLabel(PARKED_LABEL);
72
+ await client.addLabel(target.id, labelId);
73
+ });
74
+ const body = reason?.trim() ? `Parked by the factory: ${reason}` : 'Parked by the factory (no reason given).';
75
+ await attempt('park comment', key, () => client.addComment(target.id, body));
76
+ await attempt('move to parked', key, () => client.moveToState(target.id, linear.states.parked));
77
+ break;
78
+ }
79
+ case 'done':
80
+ break;
81
+ default: {
82
+ const _never = outcome;
83
+ return _never;
84
+ }
85
+ }
86
+ }
87
+ async function heartbeat(key) {
88
+ let issue;
89
+ try {
90
+ issue = await client.findIssue(key);
91
+ }
92
+ catch (err) {
93
+ warn(`linear queue: heartbeat of ${key}: lookup failed: ${messageOf(err)}`);
94
+ return true;
95
+ }
96
+ if (!issue || !issue.labels.some((l) => l.name === me))
97
+ return false;
98
+ const target = issue;
99
+ await attempt('lease renew', key, () => client.upsertLeaseAttachment(target.id, { kind: LINEAR_LEASE_KIND, claimantId, expiresAt: now() + leaseMs }));
100
+ return true;
101
+ }
102
+ async function reap() {
103
+ let issues;
104
+ try {
105
+ issues = await client.listLeasedIssues();
106
+ }
107
+ catch (err) {
108
+ warn(`linear queue: reap listing failed: ${messageOf(err)}`);
109
+ return [];
110
+ }
111
+ const rows = [];
112
+ for (const issue of issues) {
113
+ if (!issue.lease)
114
+ continue;
115
+ const lease = parseLinearClaimLease(issue.lease.metadata);
116
+ if (!lease) {
117
+ warn(`linear queue: reap of ${issue.identifier}: malformed lease attachment`);
118
+ continue;
119
+ }
120
+ if (lease.expiresAt > now())
121
+ continue;
122
+ lastError = undefined;
123
+ const freed = await freeClaim(issue, claimedByLabel(lease.claimantId), issue.lease.attachmentId);
124
+ const moved = await attempt('move to ready', issue.identifier, () => client.moveToState(issue.id, linear.states.ready));
125
+ const ok = freed && moved;
126
+ rows.push({
127
+ key: toWorkKey(issue.identifier),
128
+ claimantId: lease.claimantId,
129
+ expiresAt: lease.expiresAt,
130
+ released: ok,
131
+ outcome: ok ? 'released' : 'failed',
132
+ ...(ok ? {} : { detail: lastError }),
133
+ });
134
+ }
135
+ return rows;
136
+ }
137
+ return { release, heartbeat, reap };
138
+ }
139
+ //# sourceMappingURL=linear-queue-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-queue-lifecycle.js","sourceRoot":"","sources":["../../src/queue/linear-queue-lifecycle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@on-par/factory-core",
3
- "version": "0.9.28-next.7",
3
+ "version": "0.9.28-next.8",
4
4
  "description": "Core engine: model router, constitutions, checkers, and pipeline phases for the Software Factory.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -54,10 +54,10 @@
54
54
  "prepack": "node ../../scripts/pack-hygiene-cli.ts prepack"
55
55
  },
56
56
  "dependencies": {
57
- "@on-par/adr-kit": "0.9.28-next.7",
58
- "@on-par/contracts": "0.9.28-next.7",
59
- "@on-par/factory-config": "0.9.28-next.7",
60
- "@on-par/repo-context": "0.9.28-next.7",
57
+ "@on-par/adr-kit": "0.9.28-next.8",
58
+ "@on-par/contracts": "0.9.28-next.8",
59
+ "@on-par/factory-config": "0.9.28-next.8",
60
+ "@on-par/repo-context": "0.9.28-next.8",
61
61
  "@octokit/rest": "^22.0.0",
62
62
  "execa": "^10.2.1",
63
63
  "gray-matter": "^4.0.3",