@agent-relay/factory 0.1.1 → 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/README.md +146 -205
- package/dist/cli/fleet.d.ts +5 -1
- package/dist/cli/fleet.d.ts.map +1 -1
- package/dist/cli/fleet.js +86 -15
- package/dist/cli/fleet.js.map +1 -1
- package/dist/config/schema.d.ts +4 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +13 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/constants/linear.d.ts +2 -0
- package/dist/constants/linear.d.ts.map +1 -1
- package/dist/constants/linear.js +6 -0
- package/dist/constants/linear.js.map +1 -1
- package/dist/dispatch/templates.d.ts +18 -2
- package/dist/dispatch/templates.d.ts.map +1 -1
- package/dist/dispatch/templates.js +18 -10
- package/dist/dispatch/templates.js.map +1 -1
- package/dist/fleet/create-fleet.d.ts +3 -2
- package/dist/fleet/create-fleet.d.ts.map +1 -1
- package/dist/fleet/create-fleet.js +3 -2
- package/dist/fleet/create-fleet.js.map +1 -1
- package/dist/fleet/ensure-relay-broker.d.ts +24 -0
- package/dist/fleet/ensure-relay-broker.d.ts.map +1 -0
- package/dist/fleet/ensure-relay-broker.js +56 -0
- package/dist/fleet/ensure-relay-broker.js.map +1 -0
- package/dist/fleet/internal-fleet-client.d.ts +8 -3
- package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
- package/dist/fleet/internal-fleet-client.js +32 -5
- package/dist/fleet/internal-fleet-client.js.map +1 -1
- package/dist/fleet/relay-fleet-client.d.ts +90 -13
- package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
- package/dist/fleet/relay-fleet-client.js +496 -20
- package/dist/fleet/relay-fleet-client.js.map +1 -1
- package/dist/github/index.d.ts +4 -4
- package/dist/github/index.js +2 -2
- package/dist/github/probe-closer.d.ts +1 -1
- package/dist/github/probe-closer.js +1 -1
- package/dist/index.d.ts +33 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/linear/state-resolver.d.ts +3 -2
- package/dist/linear/state-resolver.d.ts.map +1 -1
- package/dist/linear/state-resolver.js +74 -10
- package/dist/linear/state-resolver.js.map +1 -1
- package/dist/mount/local-mount-preflight.d.ts +1 -0
- package/dist/mount/local-mount-preflight.d.ts.map +1 -1
- package/dist/mount/local-mount-preflight.js +64 -12
- package/dist/mount/local-mount-preflight.js.map +1 -1
- package/dist/mount/relayfile-binary.d.ts +2 -0
- package/dist/mount/relayfile-binary.d.ts.map +1 -1
- package/dist/mount/relayfile-binary.js +39 -5
- package/dist/mount/relayfile-binary.js.map +1 -1
- package/dist/mount/relayfile-cloud-mount-client.d.ts +2 -2
- package/dist/mount/relayfile-cloud-mount-client.js +1 -1
- package/dist/node/factory-node.d.ts +59 -0
- package/dist/node/factory-node.d.ts.map +1 -0
- package/dist/node/factory-node.js +351 -0
- package/dist/node/factory-node.js.map +1 -0
- package/dist/node/factory.node.d.ts +3 -0
- package/dist/node/factory.node.d.ts.map +1 -0
- package/dist/node/factory.node.js +5 -0
- package/dist/node/factory.node.js.map +1 -0
- package/dist/orchestrator/batch-tracker.d.ts +2 -2
- package/dist/orchestrator/factory.d.ts +5 -2
- package/dist/orchestrator/factory.d.ts.map +1 -1
- package/dist/orchestrator/factory.js +413 -59
- package/dist/orchestrator/factory.js.map +1 -1
- package/dist/orchestrator/index.d.ts +4 -4
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +3 -3
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/process-identity.d.ts +1 -1
- package/dist/orchestrator/reaper.d.ts +3 -3
- package/dist/orchestrator/reaper.js +3 -3
- package/dist/ports/fleet.d.ts +8 -2
- package/dist/ports/fleet.d.ts.map +1 -1
- package/dist/ports/index.d.ts +4 -4
- package/dist/ports/state.d.ts +3 -3
- package/dist/ports/writeback.d.ts +1 -1
- package/dist/safety/factory-scope.d.ts +2 -2
- package/dist/state/in-memory-state-store.d.ts +1 -1
- package/dist/state/in-memory-state-store.js +1 -1
- package/dist/subscriptions/event-client.d.ts +1 -1
- package/dist/subscriptions/event-client.js +2 -2
- package/dist/subscriptions/globs.js +1 -1
- package/dist/subscriptions/index.d.ts +7 -7
- package/dist/subscriptions/index.js +4 -4
- package/dist/subscriptions/linear-filter.d.ts +1 -1
- package/dist/subscriptions/linear-filter.js +1 -1
- package/dist/subscriptions/specs.d.ts +1 -1
- package/dist/subscriptions/specs.js +2 -2
- package/dist/testing/fakes.d.ts +1 -1
- package/dist/testing/fakes.js +1 -1
- package/dist/testing/fakes.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/triage/heuristic.d.ts +8 -4
- package/dist/triage/heuristic.d.ts.map +1 -1
- package/dist/triage/heuristic.js +70 -6
- package/dist/triage/heuristic.js.map +1 -1
- package/dist/triage/index.d.ts +6 -6
- package/dist/triage/index.d.ts.map +1 -1
- package/dist/triage/index.js +4 -4
- package/dist/triage/index.js.map +1 -1
- package/dist/triage/llm.d.ts +1 -1
- package/dist/triage/llm.d.ts.map +1 -1
- package/dist/triage/llm.js +5 -3
- package/dist/triage/llm.js.map +1 -1
- package/dist/triage/schema.d.ts +133 -29
- package/dist/triage/schema.d.ts.map +1 -1
- package/dist/triage/schema.js +6 -3
- package/dist/triage/schema.js.map +1 -1
- package/dist/triage/tiered.d.ts +1 -1
- package/dist/triage/tiered.d.ts.map +1 -1
- package/dist/triage/tiered.js +9 -2
- package/dist/triage/tiered.js.map +1 -1
- package/dist/types.d.ts +10 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/writeback/github.d.ts +2 -2
- package/dist/writeback/github.js +1 -1
- package/dist/writeback/index.d.ts +5 -5
- package/dist/writeback/index.js +3 -3
- package/dist/writeback/linear.d.ts +3 -3
- package/dist/writeback/linear.d.ts.map +1 -1
- package/dist/writeback/linear.js +57 -14
- package/dist/writeback/linear.js.map +1 -1
- package/dist/writeback/slack.d.ts +1 -1
- package/dist/writeback/slack.js +2 -2
- package/package.json +10 -2
- package/scripts/com.agentrelay.factory-canary.plist.example +53 -0
- package/scripts/factory-canary.sh +89 -0
package/dist/writeback/linear.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { linearCommentPath, linearIssuePath } from '../constants/linear';
|
|
2
|
-
import { assertInFactoryScope, isInFactoryScope } from '../safety/factory-scope';
|
|
3
|
-
import { asRecord, safePathSegment, stableHash, wrappedPayload } from './shared';
|
|
1
|
+
import { linearByIdPath, linearByUuidPath, linearCommentPath, linearIssuePath } from '../constants/linear.js';
|
|
2
|
+
import { assertInFactoryScope, isInFactoryScope } from '../safety/factory-scope.js';
|
|
3
|
+
import { asRecord, safePathSegment, stableHash, wrappedPayload } from './shared.js';
|
|
4
4
|
const issuePath = (issue) => issue.path || linearIssuePath(issue.key, issue.uuid);
|
|
5
5
|
export const linearCommentName = (issue, body) => `${issue.key}__factory-${stableHash(body)}`;
|
|
6
6
|
const linearCommentPayload = (issue, body) => ({
|
|
@@ -27,14 +27,40 @@ const safetyFromConfig = (configOrStateIds) => {
|
|
|
27
27
|
const payloadInFactoryScope = (payload, safety) => {
|
|
28
28
|
return isInFactoryScope(scopeIssueFromPayload(payload, 'createIssue payload'), safety);
|
|
29
29
|
};
|
|
30
|
+
const hasGuardFields = (payload) => typeof payload.title === 'string' || Array.isArray(payload.labels) || asRecord(payload.team) !== undefined;
|
|
30
31
|
const readIssuePayloadForGuard = async (mount, issue) => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
// The primary <key>__<uuid>.json may be a change-event STUB (no title/labels/
|
|
33
|
+
// team — the sparse-sync case); fall back to the canonical by-id/by-uuid
|
|
34
|
+
// records so the factory-scope guard sees the real fields and doesn't refuse a
|
|
35
|
+
// legitimately-[factory] issue.
|
|
36
|
+
const candidates = [
|
|
37
|
+
issuePath(issue),
|
|
38
|
+
...(issue.key ? [linearByIdPath(issue.key)] : []),
|
|
39
|
+
...(issue.uuid ? [linearByUuidPath(issue.uuid)] : []),
|
|
40
|
+
];
|
|
41
|
+
let primaryPayload;
|
|
42
|
+
let lastError;
|
|
43
|
+
for (const path of candidates) {
|
|
44
|
+
try {
|
|
45
|
+
const payload = wrappedPayload((await mount.readFile(path)).content);
|
|
46
|
+
if (primaryPayload === undefined) {
|
|
47
|
+
primaryPayload = payload;
|
|
48
|
+
}
|
|
49
|
+
if (hasGuardFields(payload)) {
|
|
50
|
+
return payload;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
lastError = error;
|
|
55
|
+
}
|
|
34
56
|
}
|
|
35
|
-
|
|
36
|
-
|
|
57
|
+
// No record carried guard fields. Preserve prior behavior: return the primary
|
|
58
|
+
// payload (the scope guard then decides) rather than failing the read outright.
|
|
59
|
+
if (primaryPayload !== undefined) {
|
|
60
|
+
return primaryPayload;
|
|
37
61
|
}
|
|
62
|
+
throw new Error(`Refusing Linear writeback for ${issue.key}: unable to read guard fields` +
|
|
63
|
+
(lastError instanceof Error ? ` (${lastError.message})` : ''));
|
|
38
64
|
};
|
|
39
65
|
const createIssuePath = (payload) => {
|
|
40
66
|
const id = typeof payload.id === 'string' && payload.id ? payload.id : undefined;
|
|
@@ -47,16 +73,33 @@ const createIssuePath = (payload) => {
|
|
|
47
73
|
throw new Error('Linear createIssue payload must include a non-provider id/clientId');
|
|
48
74
|
};
|
|
49
75
|
const looksLikeProviderIssueIdentifier = (value) => /^[A-Z][A-Z0-9]*-/u.test(value);
|
|
76
|
+
const READBACK_CONFIRM_ATTEMPTS = 3;
|
|
77
|
+
const READBACK_CONFIRM_DELAY_MS = 250;
|
|
78
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
50
79
|
const confirmWriteback = async (mount, path, verify, logger) => {
|
|
51
80
|
await assertWritebackAcked(mount, path);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
81
|
+
// getOp can return a FAKED success on a busy/wedged mount ("workspace write
|
|
82
|
+
// path is busy"), so the read-back is the source of truth. Retry to absorb
|
|
83
|
+
// eventual-consistency lag; if it never confirms, the write did NOT land —
|
|
84
|
+
// throw instead of silently faking success (which previously left issues
|
|
85
|
+
// un-advanced while the factory believed they had advanced).
|
|
86
|
+
for (let attempt = 0; attempt < READBACK_CONFIRM_ATTEMPTS; attempt += 1) {
|
|
87
|
+
let confirmed = false;
|
|
88
|
+
try {
|
|
89
|
+
confirmed = await verify();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
confirmed = false;
|
|
93
|
+
}
|
|
94
|
+
if (confirmed) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (attempt < READBACK_CONFIRM_ATTEMPTS - 1) {
|
|
98
|
+
logger.warn?.(`[factory-sdk] Linear writeback read-back for ${path} not yet confirmed (attempt ${attempt + 1}/${READBACK_CONFIRM_ATTEMPTS}); retrying`);
|
|
99
|
+
await delay(READBACK_CONFIRM_DELAY_MS);
|
|
55
100
|
}
|
|
56
101
|
}
|
|
57
|
-
|
|
58
|
-
logger.warn?.(`[factory-sdk] Linear writeback read-back verification errored for ${path}; treating getOp ack as success`, error);
|
|
59
|
-
}
|
|
102
|
+
throw new Error(`[factory-sdk] Linear writeback for ${path} acked but the read-back never confirmed it landed; the write did not propagate`);
|
|
60
103
|
};
|
|
61
104
|
const assertWritebackAcked = async (mount, path) => {
|
|
62
105
|
const confirmation = await mount.confirmWrite(path, { timeoutMs: 90_000 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/writeback/linear.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/writeback/linear.ts"],"names":[],"mappings":"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"}
|
package/dist/writeback/slack.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { slackMessagePath, slackReplyPath } from '../constants/slack';
|
|
2
|
-
import { safePathSegment, stableHash, trimToLines, wrappedPayload } from './shared';
|
|
1
|
+
import { slackMessagePath, slackReplyPath } from '../constants/slack.js';
|
|
2
|
+
import { safePathSegment, stableHash, trimToLines, wrappedPayload } from './shared.js';
|
|
3
3
|
const channelIdFromDir = (channelDir) => channelDir.split('__')[0] ?? channelDir;
|
|
4
4
|
const channelSegment = (value) => {
|
|
5
5
|
const trimmed = value.trim().replace(/^#/u, '');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/factory",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Agent factory — triage, dispatch, merge-gate for relayfile-driven workspaces",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
22
|
"bin/factory.mjs",
|
|
23
|
+
"scripts/factory-canary.sh",
|
|
24
|
+
"scripts/com.agentrelay.factory-canary.plist.example",
|
|
23
25
|
"package.json",
|
|
24
26
|
"README.md"
|
|
25
27
|
],
|
|
@@ -38,19 +40,24 @@
|
|
|
38
40
|
"./writeback": {
|
|
39
41
|
"types": "./dist/writeback/index.d.ts",
|
|
40
42
|
"import": "./dist/writeback/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./node": {
|
|
45
|
+
"types": "./dist/node/factory.node.d.ts",
|
|
46
|
+
"import": "./dist/node/factory.node.js"
|
|
41
47
|
}
|
|
42
48
|
},
|
|
43
49
|
"publishConfig": {
|
|
44
50
|
"access": "public"
|
|
45
51
|
},
|
|
46
52
|
"scripts": {
|
|
47
|
-
"build": "tsc -p tsconfig.build.json",
|
|
53
|
+
"build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
48
54
|
"test": "vitest run",
|
|
49
55
|
"factory-build": "factory-build/run-factory-build.sh"
|
|
50
56
|
},
|
|
51
57
|
"dependencies": {
|
|
52
58
|
"@agent-relay/cloud": "^8.7.2",
|
|
53
59
|
"@agent-relay/harness-driver": "^8.3.7",
|
|
60
|
+
"@agent-relay/integration-prompts": "^8.8.3",
|
|
54
61
|
"@relayfile/sdk": "^0.8.29",
|
|
55
62
|
"agent-relay": "^8.8.1",
|
|
56
63
|
"zod": "^3.25.76"
|
|
@@ -60,6 +67,7 @@
|
|
|
60
67
|
"@relayflows/core": "^1.0.3",
|
|
61
68
|
"@types/node": "^22.10.2",
|
|
62
69
|
"esbuild": "^0.24.2",
|
|
70
|
+
"tsc-alias": "^1.8.17",
|
|
63
71
|
"typescript": "^5.7.0",
|
|
64
72
|
"vitest": "^4.1.8"
|
|
65
73
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
launchd template for the factory sync-fidelity canary (see factory-canary.sh).
|
|
4
|
+
|
|
5
|
+
Install (macOS):
|
|
6
|
+
1. Replace __FACTORY_WORKDIR__ with your factory deployment dir (the one with
|
|
7
|
+
factory.config.json), and __FACTORY_BIN__ with the path to factory.mjs
|
|
8
|
+
(e.g. node_modules/@agent-relay/factory/bin/factory.mjs). Set the issue key
|
|
9
|
+
and, optionally, FACTORY_CANARY_SLACK_WEBHOOK.
|
|
10
|
+
2. cp scripts/com.agentrelay.factory-canary.plist.example \
|
|
11
|
+
~/Library/LaunchAgents/com.agentrelay.factory-canary.plist
|
|
12
|
+
3. launchctl load ~/Library/LaunchAgents/com.agentrelay.factory-canary.plist
|
|
13
|
+
4. launchctl start com.agentrelay.factory-canary # run once now to verify
|
|
14
|
+
|
|
15
|
+
Runs every 6h (StartInterval 21600). Logs to <workdir>/.factory-canary.log.
|
|
16
|
+
Run from the deployment dir so the canary reuses the running relay broker.
|
|
17
|
+
-->
|
|
18
|
+
<plist version="1.0">
|
|
19
|
+
<dict>
|
|
20
|
+
<key>Label</key>
|
|
21
|
+
<string>com.agentrelay.factory-canary</string>
|
|
22
|
+
|
|
23
|
+
<key>ProgramArguments</key>
|
|
24
|
+
<array>
|
|
25
|
+
<string>/bin/bash</string>
|
|
26
|
+
<string>__FACTORY_WORKDIR__/scripts/factory-canary.sh</string>
|
|
27
|
+
</array>
|
|
28
|
+
|
|
29
|
+
<key>WorkingDirectory</key>
|
|
30
|
+
<string>__FACTORY_WORKDIR__</string>
|
|
31
|
+
|
|
32
|
+
<key>EnvironmentVariables</key>
|
|
33
|
+
<dict>
|
|
34
|
+
<key>FACTORY_CANARY_ISSUE</key>
|
|
35
|
+
<string>AR-305</string>
|
|
36
|
+
<key>FACTORY_WORKDIR</key>
|
|
37
|
+
<string>__FACTORY_WORKDIR__</string>
|
|
38
|
+
<key>FACTORY_BIN</key>
|
|
39
|
+
<string>__FACTORY_BIN__</string>
|
|
40
|
+
<key>FACTORY_CANARY_SLACK_WEBHOOK</key>
|
|
41
|
+
<string></string>
|
|
42
|
+
</dict>
|
|
43
|
+
|
|
44
|
+
<key>StartInterval</key>
|
|
45
|
+
<integer>21600</integer>
|
|
46
|
+
<key>RunAtLoad</key>
|
|
47
|
+
<true/>
|
|
48
|
+
<key>StandardOutPath</key>
|
|
49
|
+
<string>__FACTORY_WORKDIR__/.factory-canary.log</string>
|
|
50
|
+
<key>StandardErrorPath</key>
|
|
51
|
+
<string>__FACTORY_WORKDIR__/.factory-canary.log</string>
|
|
52
|
+
</dict>
|
|
53
|
+
</plist>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# factory-canary.sh — scheduled sync-fidelity regression detector.
|
|
4
|
+
#
|
|
5
|
+
# Runs `factory canary <issue>` against the LIVE relayfile mount and asserts a
|
|
6
|
+
# known "Ready for Agent" issue is still classified dispatch-ready by the real
|
|
7
|
+
# triage path. If it ever flips to "skipped" (e.g. the Linear sync regresses to
|
|
8
|
+
# sparse records with no state.id), this exits non-zero and alerts — catching the
|
|
9
|
+
# regression before it silently blocks every factory dispatch.
|
|
10
|
+
#
|
|
11
|
+
# Run it on a schedule (cron/launchd) from your factory deployment directory —
|
|
12
|
+
# the one holding factory.config.json, where the relayfile mount + relay broker
|
|
13
|
+
# already live (so the canary reuses the running broker rather than spawning one).
|
|
14
|
+
# See scripts/com.agentrelay.factory-canary.plist.example for a launchd template.
|
|
15
|
+
#
|
|
16
|
+
# Config (env vars):
|
|
17
|
+
# FACTORY_CANARY_ISSUE Linear issue key to check (default: the first arg)
|
|
18
|
+
# FACTORY_WORKDIR deployment dir with factory.config.json (default: cwd)
|
|
19
|
+
# FACTORY_CONFIG config path, relative to FACTORY_WORKDIR (default: factory.config.json)
|
|
20
|
+
# FACTORY_BIN path to factory.mjs (default: this repo's bin/factory.mjs)
|
|
21
|
+
# FACTORY_BACKEND --backend value (default: internal)
|
|
22
|
+
# FACTORY_CANARY_TIMEOUT seconds before the canary is considered hung (default: 180)
|
|
23
|
+
# FACTORY_CANARY_SLACK_WEBHOOK optional Slack incoming-webhook URL for failure alerts
|
|
24
|
+
#
|
|
25
|
+
# Exit codes: 0 = dispatch-ready (healthy); 1 = NOT ready / error / hung.
|
|
26
|
+
|
|
27
|
+
set -uo pipefail
|
|
28
|
+
|
|
29
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
30
|
+
ISSUE="${FACTORY_CANARY_ISSUE:-${1:-}}"
|
|
31
|
+
WORKDIR="${FACTORY_WORKDIR:-$PWD}"
|
|
32
|
+
CONFIG="${FACTORY_CONFIG:-factory.config.json}"
|
|
33
|
+
BIN="${FACTORY_BIN:-$SCRIPT_DIR/../bin/factory.mjs}"
|
|
34
|
+
BACKEND="${FACTORY_BACKEND:-internal}"
|
|
35
|
+
TIMEOUT="${FACTORY_CANARY_TIMEOUT:-180}"
|
|
36
|
+
TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
37
|
+
|
|
38
|
+
if [[ -z "$ISSUE" ]]; then
|
|
39
|
+
echo "[$TS] factory-canary: no issue key (set FACTORY_CANARY_ISSUE or pass an arg)" >&2
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
if [[ ! -f "$BIN" ]]; then
|
|
43
|
+
echo "[$TS] factory-canary: factory bin not found at $BIN" >&2
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
cd "$WORKDIR" || { echo "[$TS] factory-canary: cannot cd to $WORKDIR" >&2; exit 1; }
|
|
47
|
+
|
|
48
|
+
# The canary runs the real dry-run triage path (no agents spawned) and prints a
|
|
49
|
+
# JSON verdict {ok,issue,status,reason}; exit code mirrors ok. A hung run
|
|
50
|
+
# (broker/mount wedge) is bounded by FACTORY_CANARY_TIMEOUT.
|
|
51
|
+
RUN=(node "$BIN" factory canary "$ISSUE" --config "$CONFIG" --backend "$BACKEND")
|
|
52
|
+
# A hung run (broker/mount wedge) MUST be bounded — an unbounded canary on a
|
|
53
|
+
# scheduler (launchd/cron) can wedge the slot forever and suppress later alerts.
|
|
54
|
+
# macOS has no `timeout` by default; coreutils ships it as `gtimeout`. If neither
|
|
55
|
+
# is present, fail closed rather than run without a deadline.
|
|
56
|
+
TIMEOUT_BIN=""
|
|
57
|
+
if command -v timeout >/dev/null 2>&1; then
|
|
58
|
+
TIMEOUT_BIN="timeout"
|
|
59
|
+
elif command -v gtimeout >/dev/null 2>&1; then
|
|
60
|
+
TIMEOUT_BIN="gtimeout"
|
|
61
|
+
fi
|
|
62
|
+
if [[ -z "$TIMEOUT_BIN" ]]; then
|
|
63
|
+
echo "[$TS] factory-canary: no timeout utility found (install coreutils for 'timeout'/'gtimeout'); refusing to run unbounded" >&2
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
OUT="$("$TIMEOUT_BIN" "$TIMEOUT" "${RUN[@]}" 2>/dev/null)"
|
|
67
|
+
CODE=$?
|
|
68
|
+
if [[ $CODE -eq 124 ]]; then
|
|
69
|
+
echo "[$TS] factory-canary: TIMED OUT after ${TIMEOUT}s (broker/mount may be wedged)" >&2
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# The CLI prints a pretty-printed (multi-line) JSON verdict, so parse the whole
|
|
73
|
+
# output — not just the last line (which is only the closing `}`).
|
|
74
|
+
echo "[$TS] factory-canary $ISSUE -> exit $CODE"
|
|
75
|
+
[[ $CODE -eq 0 ]] && exit 0
|
|
76
|
+
|
|
77
|
+
REASON="$(printf '%s' "$OUT" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{const v=JSON.parse(s);console.log(`${v.status||"error"}: ${v.reason||"unknown"}`)}catch{console.log("unparseable verdict")}})' 2>/dev/null)"
|
|
78
|
+
MSG=":rotating_light: factory canary FAILED for ${ISSUE} — ${REASON}. Sync fidelity may have regressed (issue no longer dispatch-ready)."
|
|
79
|
+
echo "[$TS] $MSG" >&2
|
|
80
|
+
|
|
81
|
+
if [[ -n "${FACTORY_CANARY_SLACK_WEBHOOK:-}" ]]; then
|
|
82
|
+
curl -sS -m 15 -X POST -H 'Content-type: application/json' \
|
|
83
|
+
--data "$(node -e 'process.stdout.write(JSON.stringify({text:process.argv[1]}))' "$MSG")" \
|
|
84
|
+
"$FACTORY_CANARY_SLACK_WEBHOOK" >/dev/null 2>&1 \
|
|
85
|
+
&& echo "[$TS] factory-canary: posted Slack alert" >&2 \
|
|
86
|
+
|| echo "[$TS] factory-canary: Slack alert post failed" >&2
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
exit 1
|