@groundnuty/macf 0.2.34 → 0.2.36
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/.build-info.json +2 -2
- package/dist/cli/claude-sh.d.ts.map +1 -1
- package/dist/cli/claude-sh.js +13 -2
- package/dist/cli/claude-sh.js.map +1 -1
- package/dist/cli/commands/certs.js +3 -3
- package/dist/cli/commands/certs.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +15 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/plugin-fetcher.d.ts +24 -0
- package/dist/cli/plugin-fetcher.d.ts.map +1 -1
- package/dist/cli/plugin-fetcher.js +61 -1
- package/dist/cli/plugin-fetcher.js.map +1 -1
- package/dist/cli/settings-writer.d.ts +34 -5
- package/dist/cli/settings-writer.d.ts.map +1 -1
- package/dist/cli/settings-writer.js +54 -5
- package/dist/cli/settings-writer.js.map +1 -1
- package/dist/cli/version-resolver.d.ts +2 -5
- package/dist/cli/version-resolver.d.ts.map +1 -1
- package/dist/cli/version-resolver.js +5 -19
- package/dist/cli/version-resolver.js.map +1 -1
- package/dist/reconciler/parse-delivered.d.ts +32 -0
- package/dist/reconciler/parse-delivered.d.ts.map +1 -0
- package/dist/reconciler/parse-delivered.js +18 -0
- package/dist/reconciler/parse-delivered.js.map +1 -0
- package/dist/reconciler/parse-processed.d.ts +57 -0
- package/dist/reconciler/parse-processed.d.ts.map +1 -0
- package/dist/reconciler/parse-processed.js +41 -0
- package/dist/reconciler/parse-processed.js.map +1 -0
- package/dist/reconciler/reconcile.d.ts +99 -0
- package/dist/reconciler/reconcile.d.ts.map +1 -0
- package/dist/reconciler/reconcile.js +75 -0
- package/dist/reconciler/reconcile.js.map +1 -0
- package/dist/reconciler/run.d.ts +3 -0
- package/dist/reconciler/run.d.ts.map +1 -0
- package/dist/reconciler/run.js +184 -0
- package/dist/reconciler/run.js.map +1 -0
- package/package.json +2 -2
- package/plugin/rules/coordination.md +23 -14
- package/plugin/rules/mention-routing-hygiene.md +2 -0
- package/plugin/rules/silent-fallback-hazards.md +49 -10
- package/scripts/check-close-keyword.sh +218 -0
- package/scripts/emit-turn-receipt.sh +81 -0
|
@@ -66,6 +66,31 @@ export const MACF_MENTION_HOOK_COMMAND = '$CLAUDE_PROJECT_DIR/.claude/scripts/ch
|
|
|
66
66
|
* demonstrated the bash-form path empirically; UC-2 mirrors it.
|
|
67
67
|
*/
|
|
68
68
|
export const MACF_LGTM_HOOK_COMMAND = '$CLAUDE_PROJECT_DIR/.claude/scripts/check-lgtm-gate.sh';
|
|
69
|
+
/**
|
|
70
|
+
* Close-keyword-guard hook command (groundnuty/macf#431). Blocks
|
|
71
|
+
* `gh pr create` / `gh pr edit` invocations whose body / title contains a
|
|
72
|
+
* GitHub auto-close keyword (`close`/`closes`/`closed`/`fix`/`fixes`/`fixed`/
|
|
73
|
+
* `resolve`/`resolves`/`resolved`) adjacent to an issue ref (`#N` or
|
|
74
|
+
* `owner/repo#N`) filed by ANOTHER agent — which would auto-close that
|
|
75
|
+
* issue on merge, bypassing reporter-owns-closure (coordination.md
|
|
76
|
+
* §Issue Lifecycle 1). The parser is negation-/context-blind, so cognitive
|
|
77
|
+
* discipline proved insufficient (4 self-inflicted recurrences:
|
|
78
|
+
* macf#316/#410/#430). Path-2 structural backstop; sister to the #140 /
|
|
79
|
+
* #244+#272 / #270 hooks. Discriminator is issue authorship (self-filed
|
|
80
|
+
* `Closes #own` passes); override via MACF_SKIP_CLOSE_CHECK=1.
|
|
81
|
+
*/
|
|
82
|
+
export const MACF_CLOSE_HOOK_COMMAND = '$CLAUDE_PROJECT_DIR/.claude/scripts/check-close-keyword.sh';
|
|
83
|
+
/**
|
|
84
|
+
* The UserPromptSubmit turn-ack receipt hook (groundnuty/macf#444 Option D,
|
|
85
|
+
* piece 2). When the router injects a prompt carrying the correlation marker
|
|
86
|
+
* `[macf-route:<run_id>:<agent>]` (macf-actions piece 1), this hook fires on
|
|
87
|
+
* submit and emits a `turn_processed` OTel span — making a routed ping that
|
|
88
|
+
* BECAME A TURN observable, so a dropped one surfaces as a missing span
|
|
89
|
+
* (closes the #437 send≠receipt gap). Unlike the PreToolUse `check-*` hooks
|
|
90
|
+
* this is NOT a blocker (it observes, never `exit 2`s) and is registered
|
|
91
|
+
* `async: true` so it adds no turn latency. No-op on non-routed prompts.
|
|
92
|
+
*/
|
|
93
|
+
export const MACF_TURN_RECEIPT_HOOK_COMMAND = '$CLAUDE_PROJECT_DIR/.claude/scripts/emit-turn-receipt.sh';
|
|
69
94
|
/**
|
|
70
95
|
* The hook filenames used to identify MACF-managed entries on refresh.
|
|
71
96
|
* Matched by path-end equality (see isMacfManagedCommand) so operator
|
|
@@ -75,6 +100,8 @@ const MACF_HOOK_FILENAMES = [
|
|
|
75
100
|
'check-gh-token.sh',
|
|
76
101
|
'check-mention-routing.sh',
|
|
77
102
|
'check-lgtm-gate.sh',
|
|
103
|
+
'check-close-keyword.sh',
|
|
104
|
+
'emit-turn-receipt.sh',
|
|
78
105
|
];
|
|
79
106
|
/**
|
|
80
107
|
* True iff the command string represents one of our managed hooks — i.e.
|
|
@@ -148,11 +175,12 @@ export const PLUGIN_SKILL_PERMISSIONS = [
|
|
|
148
175
|
* the original install-time pre-approval missed.
|
|
149
176
|
*
|
|
150
177
|
* Pattern format: `mcp__plugin_<plugin-name>_<server-key>__<tool-name>`.
|
|
151
|
-
* Plugin name = `macf-agent` (per
|
|
152
|
-
* plugin.json` `name`
|
|
153
|
-
*
|
|
154
|
-
* `
|
|
155
|
-
*
|
|
178
|
+
* Plugin name = `macf-agent` (per the canonical manifest in
|
|
179
|
+
* `groundnuty/macf-marketplace:macf-agent/.claude-plugin/plugin.json` `name`
|
|
180
|
+
* field — the repo copy was removed as vestigial per macf#426; marketplace is
|
|
181
|
+
* source). Server key = `macf-agent` (per that manifest's `mcpServers.macf-agent`
|
|
182
|
+
* map key). Tool names match the channel-server's `mcp.mcp.registerTool(...)`
|
|
183
|
+
* first-arg in `packages/macf-channel-server/src/server.ts`.
|
|
156
184
|
*
|
|
157
185
|
* Keep in lockstep with the channel-server's tool registration list.
|
|
158
186
|
* When a new tool is added to the channel-server, add its pattern here
|
|
@@ -581,6 +609,9 @@ export function installPluginSkillPermissions(workspaceDir) {
|
|
|
581
609
|
* leak detector for raw `@<bot>[bot]` in describing-context)
|
|
582
610
|
* - `check-lgtm-gate.sh` (groundnuty/macf#270 — DR-023 UC-2; blocks
|
|
583
611
|
* `gh pr merge` when no non-author APPROVED review exists)
|
|
612
|
+
* - `check-close-keyword.sh` (groundnuty/macf#431 — blocks `gh pr
|
|
613
|
+
* create`/`edit` that would auto-close another agent's issue via a
|
|
614
|
+
* close-keyword adjacent to its ref)
|
|
584
615
|
*
|
|
585
616
|
* Creates the `.claude/` directory and the file if either is missing.
|
|
586
617
|
* Idempotent: repeated calls don't duplicate entries.
|
|
@@ -600,6 +631,7 @@ export function installGhTokenHook(workspaceDir) {
|
|
|
600
631
|
const settings = readSettings(path);
|
|
601
632
|
const hooks = settings.hooks ?? {};
|
|
602
633
|
const preToolUse = hooks.PreToolUse ?? [];
|
|
634
|
+
const userPromptSubmit = hooks.UserPromptSubmit ?? [];
|
|
603
635
|
// Drop any prior MACF-managed entries (any hook file in
|
|
604
636
|
// MACF_HOOK_FILENAMES) so we can replace them cleanly — guards against
|
|
605
637
|
// stale flags from older CLI versions + handles renames/additions to
|
|
@@ -621,12 +653,29 @@ export function installGhTokenHook(workspaceDir) {
|
|
|
621
653
|
matcher: 'Bash',
|
|
622
654
|
hooks: [{ type: 'command', command: MACF_LGTM_HOOK_COMMAND }],
|
|
623
655
|
},
|
|
656
|
+
{
|
|
657
|
+
matcher: 'Bash',
|
|
658
|
+
hooks: [{ type: 'command', command: MACF_CLOSE_HOOK_COMMAND }],
|
|
659
|
+
},
|
|
660
|
+
];
|
|
661
|
+
// UserPromptSubmit: the turn-ack receipt hook (groundnuty/macf#444). Same
|
|
662
|
+
// preserve-then-replace discipline as PreToolUse above — drop any prior
|
|
663
|
+
// MACF-managed UserPromptSubmit entry (by MACF_HOOK_FILENAMES basename) and
|
|
664
|
+
// re-add ours, leaving operator-authored UserPromptSubmit hooks intact. No
|
|
665
|
+
// `matcher` (UserPromptSubmit isn't tool-gated); `async: true` so it never
|
|
666
|
+
// adds turn latency.
|
|
667
|
+
const preservedUps = userPromptSubmit.filter((entry) => !entry.hooks.some((h) => isMacfManagedCommand(h.command)));
|
|
668
|
+
const macfUpsEntries = [
|
|
669
|
+
{
|
|
670
|
+
hooks: [{ type: 'command', command: MACF_TURN_RECEIPT_HOOK_COMMAND, async: true }],
|
|
671
|
+
},
|
|
624
672
|
];
|
|
625
673
|
const updated = {
|
|
626
674
|
...settings,
|
|
627
675
|
hooks: {
|
|
628
676
|
...hooks,
|
|
629
677
|
PreToolUse: [...preserved, ...macfEntries],
|
|
678
|
+
UserPromptSubmit: [...preservedUps, ...macfUpsEntries],
|
|
630
679
|
},
|
|
631
680
|
};
|
|
632
681
|
writeFileSync(path, JSON.stringify(updated, null, 2) + '\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-writer.js","sourceRoot":"","sources":["../../src/cli/settings-writer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings-writer.js","sourceRoot":"","sources":["../../src/cli/settings-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
* fetch failed" message. GitHub fetchers fall back from /releases/latest
|
|
19
19
|
* to /tags so bare-tag versioning (no GitHub Release object) still works.
|
|
20
20
|
*/
|
|
21
|
+
import { compareSemver } from '@groundnuty/macf-core';
|
|
22
|
+
export { compareSemver };
|
|
21
23
|
export interface VersionSet {
|
|
22
24
|
readonly cli: string;
|
|
23
25
|
readonly plugin: string;
|
|
@@ -41,11 +43,6 @@ export declare const SEMVER_PATTERN: RegExp;
|
|
|
41
43
|
export declare const ACTIONS_TAG_PATTERN: RegExp;
|
|
42
44
|
export declare function isValidSemver(v: string): boolean;
|
|
43
45
|
export declare function isValidActionsRef(v: string): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Compare two semver strings (x.y.z) numerically. Returns negative if a < b,
|
|
46
|
-
* zero if equal, positive if a > b. Used to pick the highest tag from a list.
|
|
47
|
-
*/
|
|
48
|
-
export declare function compareSemver(a: string, b: string): number;
|
|
49
46
|
/**
|
|
50
47
|
* Fetch latest CLI version from npm registry.
|
|
51
48
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-resolver.d.ts","sourceRoot":"","sources":["../../src/cli/version-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"version-resolver.d.ts","sourceRoot":"","sources":["../../src/cli/version-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,kBAAkB,CAAC;AA+BzG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;KAC/B,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,EAAE,UAgB/B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAoB,CAAC;AAChD,eAAO,MAAM,mBAAmB,QAAuB,CAAC;AAExD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AA4BD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAgBlE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CA6BrE;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,WAAW,CAAC,CA2BtE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAmBvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAQ5E"}
|
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
* to /tags so bare-tag versioning (no GitHub Release object) still works.
|
|
20
20
|
*/
|
|
21
21
|
import { PACKAGE_VERSION } from '../package-version.js';
|
|
22
|
+
import { compareSemver } from '@groundnuty/macf-core';
|
|
23
|
+
// Re-exported for backward compatibility: `compareSemver` originated here, but
|
|
24
|
+
// now lives in macf-core so the channel-server's collision check (groundnuty/
|
|
25
|
+
// macf#424) shares one implementation. Existing importers keep working.
|
|
26
|
+
export { compareSemver };
|
|
22
27
|
/**
|
|
23
28
|
* GitHub API headers. Uses `GH_TOKEN` from env if present — raises the
|
|
24
29
|
* anonymous 60 req/h limit to 5000 req/h. Primary #186 fix: operators
|
|
@@ -73,25 +78,6 @@ export function isValidSemver(v) {
|
|
|
73
78
|
export function isValidActionsRef(v) {
|
|
74
79
|
return ACTIONS_TAG_PATTERN.test(v) || v === 'main';
|
|
75
80
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Compare two semver strings (x.y.z) numerically. Returns negative if a < b,
|
|
78
|
-
* zero if equal, positive if a > b. Used to pick the highest tag from a list.
|
|
79
|
-
*/
|
|
80
|
-
export function compareSemver(a, b) {
|
|
81
|
-
const parse = (v) => {
|
|
82
|
-
const m = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(v);
|
|
83
|
-
if (!m)
|
|
84
|
-
return [0, 0, 0];
|
|
85
|
-
return [Number.parseInt(m[1], 10), Number.parseInt(m[2], 10), Number.parseInt(m[3], 10)];
|
|
86
|
-
};
|
|
87
|
-
const [aMaj, aMin, aPat] = parse(a);
|
|
88
|
-
const [bMaj, bMin, bPat] = parse(b);
|
|
89
|
-
if (aMaj !== bMaj)
|
|
90
|
-
return aMaj - bMaj;
|
|
91
|
-
if (aMin !== bMin)
|
|
92
|
-
return aMin - bMin;
|
|
93
|
-
return aPat - bPat;
|
|
94
|
-
}
|
|
95
81
|
/**
|
|
96
82
|
* Fetch the highest semver tag from a GitHub repo's /tags list.
|
|
97
83
|
* Returns the tag name (with leading 'v' if present) or null with reason.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-resolver.js","sourceRoot":"","sources":["../../src/cli/version-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"version-resolver.js","sourceRoot":"","sources":["../../src/cli/version-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for the macf-actions router's "delivered" log lines (groundnuty/macf#444
|
|
3
|
+
* Option D, piece 4 — the "expected set").
|
|
4
|
+
*
|
|
5
|
+
* Each `route-by-*` block in `agent-router.yml` echoes a success line when it
|
|
6
|
+
* delivers a routed prompt to an agent's tmux session:
|
|
7
|
+
*
|
|
8
|
+
* route-by-label → `Routed issue #N to <AGENT> via helper|inline (…)`
|
|
9
|
+
* route-by-mention → `Routed mention to <AGENT> via helper|inline (…)`
|
|
10
|
+
* route-by-ci-completion → `Routed CI completion for PR #N to <AGENT> via helper|inline (…)`
|
|
11
|
+
* route-by-pr-review-state→ `Routed review-state (STATE) for PR #N to <AGENT> via helper|inline (…)`
|
|
12
|
+
*
|
|
13
|
+
* The common, stable shape is `Routed … to <AGENT> via (helper|inline)`. A
|
|
14
|
+
* `Routed …` with no `via helper|inline` (e.g. the `delivery FAILED` /
|
|
15
|
+
* `offline, skipping` lines) is NOT a delivery and must not be counted. The
|
|
16
|
+
* agent token is kebab (`code-agent`, `science-agent`, `devops-agent`) — for
|
|
17
|
+
* `route-by-label` it's the label (== the agent name), which is exactly what
|
|
18
|
+
* the marker `[macf-route:${RUN_ID}:${AGENT_NAME|LABEL}]` and thus the
|
|
19
|
+
* `turn_processed` span's `agent` attr also carry, so the join matches by
|
|
20
|
+
* construction.
|
|
21
|
+
*
|
|
22
|
+
* `runId` + `deliveredAtMs` come from the run's metadata (caller supplies them),
|
|
23
|
+
* not the log text. Pure (testable) — the gh-API fetch lives in run.ts.
|
|
24
|
+
*/
|
|
25
|
+
import type { DeliveredRoute } from './reconcile.js';
|
|
26
|
+
/**
|
|
27
|
+
* Extract the agents a single router run delivered to, from its log text.
|
|
28
|
+
* Dedups per (runId, agent) — a run that logs the same agent twice yields one
|
|
29
|
+
* DeliveredRoute. Returns one entry per distinct delivered agent.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseDeliveredFromLog(logText: string, runId: string, deliveredAtMs: number): DeliveredRoute[];
|
|
32
|
+
//# sourceMappingURL=parse-delivered.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-delivered.d.ts","sourceRoot":"","sources":["../../src/reconciler/parse-delivered.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQrD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,cAAc,EAAE,CAMlB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// `Routed <anything-not-newline> to <kebab-agent> via helper|inline`.
|
|
2
|
+
// The non-greedy `.*?` + the required `via (helper|inline)` tail excludes the
|
|
3
|
+
// failure/offline lines (which have no `via helper|inline`). `\b` after the
|
|
4
|
+
// alternation avoids matching a longer accidental token.
|
|
5
|
+
const ROUTED_LINE = /Routed [^\n]*? to ([a-z][a-z0-9-]*) via (?:helper|inline)\b/g;
|
|
6
|
+
/**
|
|
7
|
+
* Extract the agents a single router run delivered to, from its log text.
|
|
8
|
+
* Dedups per (runId, agent) — a run that logs the same agent twice yields one
|
|
9
|
+
* DeliveredRoute. Returns one entry per distinct delivered agent.
|
|
10
|
+
*/
|
|
11
|
+
export function parseDeliveredFromLog(logText, runId, deliveredAtMs) {
|
|
12
|
+
const agents = new Set();
|
|
13
|
+
for (const m of logText.matchAll(ROUTED_LINE)) {
|
|
14
|
+
agents.add(m[1]);
|
|
15
|
+
}
|
|
16
|
+
return [...agents].map((agent) => ({ runId, agent, deliveredAtMs }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=parse-delivered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-delivered.js","sourceRoot":"","sources":["../../src/reconciler/parse-delivered.ts"],"names":[],"mappings":"AA0BA,sEAAsE;AACtE,8EAA8E;AAC9E,4EAA4E;AAC5E,yDAAyD;AACzD,MAAM,WAAW,GAAG,8DAA8D,CAAC;AAEnF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,KAAa,EACb,aAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for the Tempo TraceQL search response → PROCESSED receipts
|
|
3
|
+
* (groundnuty/macf#444 Option D, piece 4 — the "actual set").
|
|
4
|
+
*
|
|
5
|
+
* Query the reconciler runs (science-agent, empirically verified on live Tempo):
|
|
6
|
+
*
|
|
7
|
+
* GET /api/search
|
|
8
|
+
* q = {name="turn_processed" && resource.service.namespace="macf"}
|
|
9
|
+
* | select(span.routed_run_id, span.agent)
|
|
10
|
+
* start = <epoch SECONDS> end = <epoch SECONDS> limit = <high>
|
|
11
|
+
*
|
|
12
|
+
* `select(span.<key>)` brings the span attrs back IN the search response
|
|
13
|
+
* (no per-trace `/api/traces/<id>` fetch). Response shape:
|
|
14
|
+
*
|
|
15
|
+
* { "traces": [ { "spanSets": [ { "spans": [
|
|
16
|
+
* { "attributes": [ { "key": "routed_run_id", "value": { "stringValue": "…" } },
|
|
17
|
+
* { "key": "agent", "value": { "stringValue": "…" } } ] } ] } ] } ] }
|
|
18
|
+
*
|
|
19
|
+
* Gotchas handled (per science's notes):
|
|
20
|
+
* 1. `spanSets` (plural array) in current Tempo; older Tempo uses singular
|
|
21
|
+
* `spanSet` — handle both.
|
|
22
|
+
* 2. attribute `value` is typed: `{ stringValue: … }` for ours.
|
|
23
|
+
* 3. truncation (Tempo `limit` cap) is the CALLER's concern — a silently
|
|
24
|
+
* truncated PROCESSED set would read as missing receipts ⇒ false drops
|
|
25
|
+
* (Pattern-A class). The fetcher must assert `traceCount < limit`; this
|
|
26
|
+
* pure parser just reports `traceCount` so the caller can check.
|
|
27
|
+
*
|
|
28
|
+
* Pure (no I/O) so it's unit-testable against the recorded live shape; the
|
|
29
|
+
* fetch + truncation-guard live in run.ts.
|
|
30
|
+
*/
|
|
31
|
+
import type { ProcessedReceipt } from './reconcile.js';
|
|
32
|
+
export interface ParseProcessedResult {
|
|
33
|
+
readonly receipts: readonly ProcessedReceipt[];
|
|
34
|
+
/** Number of traces in the response — caller compares against `limit` to
|
|
35
|
+
* detect silent truncation (false-drop hazard). */
|
|
36
|
+
readonly traceCount: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse a Tempo `/api/search` response into PROCESSED receipts. Each
|
|
40
|
+
* `turn_processed` trace is a single-span trace; we read `routed_run_id` +
|
|
41
|
+
* `agent` from its span attributes. Spans missing either key are skipped
|
|
42
|
+
* (defensive — a malformed span isn't a receipt).
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseProcessedFromTempo(body: unknown): ParseProcessedResult;
|
|
45
|
+
/**
|
|
46
|
+
* Interpret a parsed result against the Tempo query `limit`. A result that HIT
|
|
47
|
+
* the limit is (possibly) TRUNCATED — and a truncated PROCESSED set is missing
|
|
48
|
+
* real receipts, which `reconcile()` would read as drops → a FALSE incident on
|
|
49
|
+
* exactly the busy windows the reconciler exists to handle (Pattern A). So
|
|
50
|
+
* truncation is NOT "these are the receipts"; it makes the PROCESSED set
|
|
51
|
+
* **unknowable**, the same as a Tempo outage. Returns the receipts only when
|
|
52
|
+
* the set is known-complete (`traceCount < limit`), else `null` — the caller
|
|
53
|
+
* treats `null` as "Tempo problem → true no-op this run" (never open, never
|
|
54
|
+
* close), distinguishing "Tempo unknown" from "0 verified drops".
|
|
55
|
+
*/
|
|
56
|
+
export declare function receiptsIfComplete(parsed: ParseProcessedResult, limit: number): readonly ProcessedReceipt[] | null;
|
|
57
|
+
//# sourceMappingURL=parse-processed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-processed.d.ts","sourceRoot":"","sources":["../../src/reconciler/parse-processed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAyBvD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C;wDACoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAiB3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,MAAM,GACZ,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAEpC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function attrString(attrs, key) {
|
|
2
|
+
return attrs?.find((a) => a.key === key)?.value?.stringValue;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Parse a Tempo `/api/search` response into PROCESSED receipts. Each
|
|
6
|
+
* `turn_processed` trace is a single-span trace; we read `routed_run_id` +
|
|
7
|
+
* `agent` from its span attributes. Spans missing either key are skipped
|
|
8
|
+
* (defensive — a malformed span isn't a receipt).
|
|
9
|
+
*/
|
|
10
|
+
export function parseProcessedFromTempo(body) {
|
|
11
|
+
const resp = (body ?? {});
|
|
12
|
+
const traces = resp.traces ?? [];
|
|
13
|
+
const receipts = [];
|
|
14
|
+
for (const trace of traces) {
|
|
15
|
+
const spanSets = trace.spanSets ?? (trace.spanSet ? [trace.spanSet] : []);
|
|
16
|
+
for (const set of spanSets) {
|
|
17
|
+
for (const span of set.spans ?? []) {
|
|
18
|
+
const runId = attrString(span.attributes, 'routed_run_id');
|
|
19
|
+
const agent = attrString(span.attributes, 'agent');
|
|
20
|
+
if (runId && agent)
|
|
21
|
+
receipts.push({ runId, agent });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return { receipts, traceCount: traces.length };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Interpret a parsed result against the Tempo query `limit`. A result that HIT
|
|
29
|
+
* the limit is (possibly) TRUNCATED — and a truncated PROCESSED set is missing
|
|
30
|
+
* real receipts, which `reconcile()` would read as drops → a FALSE incident on
|
|
31
|
+
* exactly the busy windows the reconciler exists to handle (Pattern A). So
|
|
32
|
+
* truncation is NOT "these are the receipts"; it makes the PROCESSED set
|
|
33
|
+
* **unknowable**, the same as a Tempo outage. Returns the receipts only when
|
|
34
|
+
* the set is known-complete (`traceCount < limit`), else `null` — the caller
|
|
35
|
+
* treats `null` as "Tempo problem → true no-op this run" (never open, never
|
|
36
|
+
* close), distinguishing "Tempo unknown" from "0 verified drops".
|
|
37
|
+
*/
|
|
38
|
+
export function receiptsIfComplete(parsed, limit) {
|
|
39
|
+
return parsed.traceCount >= limit ? null : parsed.receipts;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=parse-processed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-processed.js","sourceRoot":"","sources":["../../src/reconciler/parse-processed.ts"],"names":[],"mappings":"AAmDA,SAAS,UAAU,CAAC,KAAuC,EAAE,GAAW;IACtE,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC;AAC/D,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACnD,IAAI,KAAK,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA4B,EAC5B,KAAa;IAEb,OAAO,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route-receipt reconciler — pure drop-detection logic (groundnuty/macf#444
|
|
3
|
+
* Option D, piece 4).
|
|
4
|
+
*
|
|
5
|
+
* Closes the structural gap: a `turn_processed` span nobody queries is
|
|
6
|
+
* *forensic*, not *surfacing*. This is the consumer that turns the ABSENCE of
|
|
7
|
+
* a receipt span into a structural signal.
|
|
8
|
+
*
|
|
9
|
+
* It joins two sets on `(runId, agent)`:
|
|
10
|
+
* - DELIVERED — the routes the macf-actions router LOGGED as delivered
|
|
11
|
+
* (`Routed … to <AGENT> via helper|inline`), each with the route run's
|
|
12
|
+
* timestamp. (Source: GitHub run logs — see sources.ts.)
|
|
13
|
+
* - PROCESSED — the `turn_processed` spans the substrate UserPromptSubmit
|
|
14
|
+
* hook emitted when the marked prompt became a turn. (Source: Tempo
|
|
15
|
+
* TraceQL `{name="turn_processed" && resource.service.namespace="macf"}`.)
|
|
16
|
+
*
|
|
17
|
+
* A DELIVERED route is a **drop** iff it has no matching PROCESSED span AND it
|
|
18
|
+
* is older than the open-threshold. The threshold is load-bearing: a
|
|
19
|
+
* *legitimately busy* agent processes the ping late (the #437 co-verify showed
|
|
20
|
+
* ~4 min legit latency), so a recent unmatched delivery is "still in flight",
|
|
21
|
+
* NOT a drop. The threshold must exceed observed busy-turn latency (≈15–20 min,
|
|
22
|
+
* tunable). This + the per-run recompute gives the open-on-absence /
|
|
23
|
+
* self-close-on-appearance behaviour (e2e.yml #166/#163 shape): while drops
|
|
24
|
+
* exist the workflow holds an incident open; once a late span lands (or none
|
|
25
|
+
* remain) the next run reports zero drops and the workflow self-closes.
|
|
26
|
+
*
|
|
27
|
+
* The join key is the **marker-parsed** `(runId, agent)` — both sides derive
|
|
28
|
+
* from the router's `[macf-route:${GITHUB_RUN_ID}:${AGENT_NAME}]` marker /
|
|
29
|
+
* `Routed … to <AGENT>` log line, so they match by construction. (NOT the
|
|
30
|
+
* receiving agent's `MACF_AGENT_NAME`, which is unset on substrate — see #444
|
|
31
|
+
* discussion + the #451 hook.)
|
|
32
|
+
*
|
|
33
|
+
* This module is intentionally PURE (no I/O) so the load-bearing logic is fully
|
|
34
|
+
* unit-testable; the GitHub/Tempo fetchers + the incident open/self-close live
|
|
35
|
+
* in sources.ts / run.ts / the scheduled workflow.
|
|
36
|
+
*/
|
|
37
|
+
/** A delivered route the router logged, with the route run's completion time. */
|
|
38
|
+
export interface DeliveredRoute {
|
|
39
|
+
/** The `${GITHUB_RUN_ID}` of the agent-router run that delivered it. */
|
|
40
|
+
readonly runId: string;
|
|
41
|
+
/** The target agent the route was delivered to (`Routed … to <AGENT>`). */
|
|
42
|
+
readonly agent: string;
|
|
43
|
+
/** Epoch ms when the route was delivered (the router run's timestamp). */
|
|
44
|
+
readonly deliveredAtMs: number;
|
|
45
|
+
}
|
|
46
|
+
/** A `(runId, agent)` pair that produced a `turn_processed` span. */
|
|
47
|
+
export interface ProcessedReceipt {
|
|
48
|
+
readonly runId: string;
|
|
49
|
+
readonly agent: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ReconcileOptions {
|
|
52
|
+
/** Current time (epoch ms). Injected for deterministic tests. */
|
|
53
|
+
readonly nowMs: number;
|
|
54
|
+
/**
|
|
55
|
+
* A delivered-but-unmatched route younger than this is "still in flight"
|
|
56
|
+
* (a busy agent may process it late), NOT a drop. Must exceed observed
|
|
57
|
+
* busy-turn latency (#437: ~4 min) — default ≈15 min, env-tunable.
|
|
58
|
+
*/
|
|
59
|
+
readonly openThresholdMs: number;
|
|
60
|
+
/**
|
|
61
|
+
* Deployment-boundary cutoff (epoch ms): ignore delivered routes older than
|
|
62
|
+
* this. Routes that predate the receipt mechanism's go-live (a pre-v1.3.4
|
|
63
|
+
* router prompt with no marker, hitting a session with no hook) have no
|
|
64
|
+
* `turn_processed` receipt by construction — a missing receipt there is
|
|
65
|
+
* EXPECTED, not a drop. Without this the first reconcile after enabling
|
|
66
|
+
* would flag every pre-deployment route in the lookback window as a false
|
|
67
|
+
* drop (groundnuty/macf#444). Undefined / 0 ⇒ no cutoff (judge all routes).
|
|
68
|
+
*/
|
|
69
|
+
readonly sinceMs?: number;
|
|
70
|
+
}
|
|
71
|
+
export interface ReconcileResult {
|
|
72
|
+
/**
|
|
73
|
+
* Deliveries with no matching `turn_processed` span, older than the
|
|
74
|
+
* open-threshold — the structural drops to alert on. Empty ⇒ the workflow
|
|
75
|
+
* self-closes any open incident.
|
|
76
|
+
*/
|
|
77
|
+
readonly drops: readonly DeliveredRoute[];
|
|
78
|
+
/** Count of delivered routes considered (diagnostic). */
|
|
79
|
+
readonly deliveredCount: number;
|
|
80
|
+
/** Count of distinct processed receipts seen (diagnostic). */
|
|
81
|
+
readonly processedCount: number;
|
|
82
|
+
/**
|
|
83
|
+
* Delivered routes that are unmatched but still within the threshold —
|
|
84
|
+
* "in flight", reported for visibility but NOT alerted on.
|
|
85
|
+
*/
|
|
86
|
+
readonly inFlight: readonly DeliveredRoute[];
|
|
87
|
+
}
|
|
88
|
+
/** Canonical join key for a `(runId, agent)` pair. */
|
|
89
|
+
export declare function receiptKey(p: {
|
|
90
|
+
runId: string;
|
|
91
|
+
agent: string;
|
|
92
|
+
}): string;
|
|
93
|
+
/**
|
|
94
|
+
* Pure reconciliation: which delivered routes are drops (no receipt span +
|
|
95
|
+
* older than the open-threshold) vs. still-in-flight (no receipt yet but
|
|
96
|
+
* within the threshold) vs. processed (have a receipt).
|
|
97
|
+
*/
|
|
98
|
+
export declare function reconcile(delivered: readonly DeliveredRoute[], processed: readonly ProcessedReceipt[], opts: ReconcileOptions): ReconcileResult;
|
|
99
|
+
//# sourceMappingURL=reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/reconciler/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,SAAS,cAAc,EAAE,EACpC,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,IAAI,EAAE,gBAAgB,GACrB,eAAe,CA8BjB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route-receipt reconciler — pure drop-detection logic (groundnuty/macf#444
|
|
3
|
+
* Option D, piece 4).
|
|
4
|
+
*
|
|
5
|
+
* Closes the structural gap: a `turn_processed` span nobody queries is
|
|
6
|
+
* *forensic*, not *surfacing*. This is the consumer that turns the ABSENCE of
|
|
7
|
+
* a receipt span into a structural signal.
|
|
8
|
+
*
|
|
9
|
+
* It joins two sets on `(runId, agent)`:
|
|
10
|
+
* - DELIVERED — the routes the macf-actions router LOGGED as delivered
|
|
11
|
+
* (`Routed … to <AGENT> via helper|inline`), each with the route run's
|
|
12
|
+
* timestamp. (Source: GitHub run logs — see sources.ts.)
|
|
13
|
+
* - PROCESSED — the `turn_processed` spans the substrate UserPromptSubmit
|
|
14
|
+
* hook emitted when the marked prompt became a turn. (Source: Tempo
|
|
15
|
+
* TraceQL `{name="turn_processed" && resource.service.namespace="macf"}`.)
|
|
16
|
+
*
|
|
17
|
+
* A DELIVERED route is a **drop** iff it has no matching PROCESSED span AND it
|
|
18
|
+
* is older than the open-threshold. The threshold is load-bearing: a
|
|
19
|
+
* *legitimately busy* agent processes the ping late (the #437 co-verify showed
|
|
20
|
+
* ~4 min legit latency), so a recent unmatched delivery is "still in flight",
|
|
21
|
+
* NOT a drop. The threshold must exceed observed busy-turn latency (≈15–20 min,
|
|
22
|
+
* tunable). This + the per-run recompute gives the open-on-absence /
|
|
23
|
+
* self-close-on-appearance behaviour (e2e.yml #166/#163 shape): while drops
|
|
24
|
+
* exist the workflow holds an incident open; once a late span lands (or none
|
|
25
|
+
* remain) the next run reports zero drops and the workflow self-closes.
|
|
26
|
+
*
|
|
27
|
+
* The join key is the **marker-parsed** `(runId, agent)` — both sides derive
|
|
28
|
+
* from the router's `[macf-route:${GITHUB_RUN_ID}:${AGENT_NAME}]` marker /
|
|
29
|
+
* `Routed … to <AGENT>` log line, so they match by construction. (NOT the
|
|
30
|
+
* receiving agent's `MACF_AGENT_NAME`, which is unset on substrate — see #444
|
|
31
|
+
* discussion + the #451 hook.)
|
|
32
|
+
*
|
|
33
|
+
* This module is intentionally PURE (no I/O) so the load-bearing logic is fully
|
|
34
|
+
* unit-testable; the GitHub/Tempo fetchers + the incident open/self-close live
|
|
35
|
+
* in sources.ts / run.ts / the scheduled workflow.
|
|
36
|
+
*/
|
|
37
|
+
/** Canonical join key for a `(runId, agent)` pair. */
|
|
38
|
+
export function receiptKey(p) {
|
|
39
|
+
return `${p.runId}:${p.agent}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pure reconciliation: which delivered routes are drops (no receipt span +
|
|
43
|
+
* older than the open-threshold) vs. still-in-flight (no receipt yet but
|
|
44
|
+
* within the threshold) vs. processed (have a receipt).
|
|
45
|
+
*/
|
|
46
|
+
export function reconcile(delivered, processed, opts) {
|
|
47
|
+
const processedKeys = new Set(processed.map(receiptKey));
|
|
48
|
+
// Deployment-boundary guard (groundnuty/macf#444): drop routes delivered
|
|
49
|
+
// before the receipt mechanism went live from scope entirely — those prompts
|
|
50
|
+
// had no marker and hit hookless sessions, so a missing receipt is EXPECTED,
|
|
51
|
+
// not a drop. Else the first reconcile after enabling would false-alarm on
|
|
52
|
+
// every pre-deployment route in the lookback window.
|
|
53
|
+
const sinceMs = opts.sinceMs;
|
|
54
|
+
const inScope = sinceMs ? delivered.filter((r) => r.deliveredAtMs >= sinceMs) : delivered;
|
|
55
|
+
const drops = [];
|
|
56
|
+
const inFlight = [];
|
|
57
|
+
for (const route of inScope) {
|
|
58
|
+
if (processedKeys.has(receiptKey(route)))
|
|
59
|
+
continue; // receipt landed — fine
|
|
60
|
+
const ageMs = opts.nowMs - route.deliveredAtMs;
|
|
61
|
+
if (ageMs > opts.openThresholdMs) {
|
|
62
|
+
drops.push(route); // unmatched + past the threshold → structural drop
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
inFlight.push(route); // unmatched but young → busy agent may process late
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
drops,
|
|
70
|
+
inFlight,
|
|
71
|
+
deliveredCount: inScope.length,
|
|
72
|
+
processedCount: processedKeys.size,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/reconciler/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAyDH,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,CAAmC;IAC5D,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,SAAoC,EACpC,SAAsC,EACtC,IAAsB;IAEtB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzD,yEAAyE;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,qDAAqD;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAE,SAAS,CAAC,wBAAwB;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mDAAmD;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oDAAoD;QAC5E,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,QAAQ;QACR,cAAc,EAAE,OAAO,CAAC,MAAM;QAC9B,cAAc,EAAE,aAAa,CAAC,IAAI;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/reconciler/run.ts"],"names":[],"mappings":""}
|