@rubytech/create-maxy-code 0.1.603 → 0.1.605
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/__tests__/email-sampler-unit.test.js +22 -0
- package/dist/index.js +3 -0
- package/dist/port-resolution.js +9 -1
- package/package.json +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.d.ts +46 -2
- package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.js +84 -32
- package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -1
- package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +0 -0
- package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +48 -2
- package/payload/platform/lib/routine-templates/src/roster.ts +133 -35
- package/payload/platform/lib/telegram-store-read/dist/index.d.ts +59 -0
- package/payload/platform/lib/telegram-store-read/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/telegram-store-read/dist/index.js +219 -0
- package/payload/platform/lib/telegram-store-read/dist/index.js.map +1 -0
- package/payload/platform/lib/telegram-store-read/src/__tests__/fold.test.ts +124 -0
- package/payload/platform/lib/telegram-store-read/src/index.ts +262 -0
- package/payload/platform/lib/telegram-store-read/tsconfig.json +9 -0
- package/payload/platform/lib/telegram-store-read/vitest.config.ts +9 -0
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +39 -6
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +11 -0
- package/payload/platform/plugins/connector/PLUGIN.md +9 -1
- package/payload/platform/plugins/connector/mcp/dist/__tests__/queue-descriptor.test.d.ts +2 -0
- package/payload/platform/plugins/connector/mcp/dist/__tests__/queue-descriptor.test.d.ts.map +1 -0
- package/payload/platform/plugins/connector/mcp/dist/__tests__/queue-descriptor.test.js +67 -0
- package/payload/platform/plugins/connector/mcp/dist/__tests__/queue-descriptor.test.js.map +1 -0
- package/payload/platform/plugins/connector/mcp/dist/index.js +36 -5
- package/payload/platform/plugins/connector/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/connector/mcp/dist/lib/store.d.ts +35 -0
- package/payload/platform/plugins/connector/mcp/dist/lib/store.d.ts.map +1 -1
- package/payload/platform/plugins/connector/mcp/dist/lib/store.js +33 -0
- package/payload/platform/plugins/connector/mcp/dist/lib/store.js.map +1 -1
- package/payload/platform/plugins/connector/mcp/package.json +4 -2
- package/payload/platform/plugins/connector/mcp/vitest.config.ts +8 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +2 -2
- package/payload/platform/plugins/docs/references/outlook-guide.md +21 -2
- package/payload/platform/plugins/docs/references/telegram-guide.md +15 -1
- package/payload/platform/plugins/email/PLUGIN.md +14 -1
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/retention.test.d.ts +2 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/retention.test.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/retention.test.js +233 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/retention.test.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.js +30 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/sampler/main.js +68 -3
- package/payload/platform/plugins/email/mcp/dist/sampler/main.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/sampler/retention-sources.d.ts +3 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention-sources.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention-sources.js +146 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention-sources.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention.d.ts +150 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention.js +199 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/retention.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.d.ts +5 -0
- package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.js +10 -5
- package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-section-properties-strip.test.js +11 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-section-properties-strip.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +8 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sample-outlook-mailbox.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sample-outlook-mailbox.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sample-outlook-mailbox.test.js +324 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sample-outlook-mailbox.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-cursor.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-cursor.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-cursor.test.js +102 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-cursor.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-enumerate.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-enumerate.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-enumerate.test.js +125 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/sampler-enumerate.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/arm.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/arm.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/arm.js +109 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/arm.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/cursor.d.ts +25 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/cursor.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/cursor.js +94 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/cursor.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/enumerate.d.ts +41 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/enumerate.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/enumerate.js +122 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/enumerate.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/sample-outlook-mailbox.d.ts +73 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/sample-outlook-mailbox.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/sample-outlook-mailbox.js +162 -0
- package/payload/platform/plugins/outlook/mcp/dist/sampler/sample-outlook-mailbox.js.map +1 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +8 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-flag.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-flag.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-flag.test.js +90 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-flag.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js +26 -4
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate-flag.d.ts +78 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate-flag.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate-flag.js +76 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate-flag.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +8 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +9 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js +15 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +12 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +34 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +9 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +40 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +435 -5
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +21 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +294 -6
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +553 -11
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/messages.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/messages.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/messages.test.js +157 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/messages.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js +2 -2
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/index.js +32 -34
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/messages.d.ts +27 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/messages.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/messages.js +152 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/messages.js.map +1 -0
- package/payload/platform/plugins/telegram/skills/build/SKILL.md +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/public/operator.html +1 -1
- package/payload/server/server.js +69 -5
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +0 -16
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +0 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +0 -68
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +0 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The configured retention period in whole days, or null.
|
|
3
|
+
*
|
|
4
|
+
* Null means PRUNE NOTHING, and every unreadable value resolves to it: unset,
|
|
5
|
+
* empty, zero, negative, fractional, non-numeric. Deletion is a thing the
|
|
6
|
+
* operator turns on per install, never a default, because the failure direction
|
|
7
|
+
* here is unrecoverable — the 2026-04-20 incident that ended autonomous graph
|
|
8
|
+
* hygiene rules is recorded at `memory/mcp/src/lib/graph-prune.ts:6`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveRetentionDays(env: NodeJS.ProcessEnv): number | null;
|
|
11
|
+
/**
|
|
12
|
+
* The largest period this accepts, a hundred years.
|
|
13
|
+
*
|
|
14
|
+
* An upper bound and not only a lower one, because `cutoffIso` subtracts
|
|
15
|
+
* `days * 86_400_000` milliseconds and a value past the ±8.64e15 Date range
|
|
16
|
+
* yields an Invalid Date whose `toISOString()` throws. Without this, a fat-finger
|
|
17
|
+
* `EMAIL_RETENTION_DAYS` passes the integer guard and then throws once per
|
|
18
|
+
* account per cycle for ever, reported as a retention error rather than as the
|
|
19
|
+
* bad configuration it is. Anything beyond a century is a typo, and refusing it
|
|
20
|
+
* here prunes nothing, which is the same safe direction as every other
|
|
21
|
+
* unreadable value.
|
|
22
|
+
*/
|
|
23
|
+
export declare const RETENTION_MAX_DAYS = 36500;
|
|
24
|
+
/**
|
|
25
|
+
* The instant a section must predate to be old enough to prune.
|
|
26
|
+
*
|
|
27
|
+
* Emitted through `toISOString()` because every `:Section.createdAt` is written
|
|
28
|
+
* the same way through a writer-owned key the ingest's reserved list forbids
|
|
29
|
+
* content from setting (`memory/mcp/src/tools/memory-ingest.ts:222-238`). Both
|
|
30
|
+
* sides therefore have the same fixed-width shape, which is what makes the
|
|
31
|
+
* lexical comparison in the Cypher equal to a chronological one.
|
|
32
|
+
*/
|
|
33
|
+
export declare function cutoffIso(now: Date, days: number): string;
|
|
34
|
+
/** One routine's gate as the graph holds it. `gateArgs` is the JSON the gate
|
|
35
|
+
* tool receives, `{"eventId":…,"checks":[…]}`. */
|
|
36
|
+
export interface GateRow {
|
|
37
|
+
eventId: string;
|
|
38
|
+
gateArgs: string | null;
|
|
39
|
+
}
|
|
40
|
+
/** The routines watching each grain, by the `eventId` their flags carry. */
|
|
41
|
+
export interface InterestedSets {
|
|
42
|
+
section: string[];
|
|
43
|
+
archive: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Which routines are interested in this account's email nodes, split by grain.
|
|
47
|
+
*
|
|
48
|
+
* A routine gated on `ConversationArchive` counts as interested in the sections
|
|
49
|
+
* underneath that archive (operator decision 2026-08-13): it reads them, so
|
|
50
|
+
* pruning one it has not flagged would strip content out from under a routine
|
|
51
|
+
* that never saw it. The two sets are consulted at different grains because that
|
|
52
|
+
* is where the dispatcher writes their flags — a `Section`-gated routine's id
|
|
53
|
+
* lands on the section, a `ConversationArchive`-gated routine's on the parent.
|
|
54
|
+
*
|
|
55
|
+
* A gate this cannot read contributes NOTHING and never throws. That is the safe
|
|
56
|
+
* direction in both halves: an unreadable gate shrinks the interested set, and a
|
|
57
|
+
* smaller set can only make MORE sections prunable — so it is paired with the
|
|
58
|
+
* empty-set rule in `sweepAccount`, which refuses to prune on a set of nobody.
|
|
59
|
+
*/
|
|
60
|
+
export declare function interestedSets(rows: GateRow[]): InterestedSets;
|
|
61
|
+
/**
|
|
62
|
+
* One candidate: a section already filtered to `source:'email'` and to an age
|
|
63
|
+
* past the cutoff, carried with the two flag lists that decide it.
|
|
64
|
+
* `parentProcessedBy` is null when the section has no `:ConversationArchive`
|
|
65
|
+
* parent, which is a shape this sweep did not write and therefore keeps.
|
|
66
|
+
*/
|
|
67
|
+
export interface AgedSection {
|
|
68
|
+
id: string;
|
|
69
|
+
processedBy: string[];
|
|
70
|
+
parentProcessedBy: string[] | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Split aged candidates into the ones every interested routine has finished with
|
|
74
|
+
* and a count of the ones still outstanding for somebody.
|
|
75
|
+
*
|
|
76
|
+
* Age is NOT re-checked here: the caller's Cypher filtered on the cutoff, so a
|
|
77
|
+
* row reaching this function is old enough by construction. The predicate is
|
|
78
|
+
* membership only.
|
|
79
|
+
*
|
|
80
|
+
* A flag from a routine that is no longer interested is ignored rather than
|
|
81
|
+
* required, because the set is derived from the gates that exist NOW. A deleted
|
|
82
|
+
* routine must not pin the archive for ever.
|
|
83
|
+
*/
|
|
84
|
+
export declare function partitionAged(rows: AgedSection[], sets: InterestedSets): {
|
|
85
|
+
prunable: string[];
|
|
86
|
+
keptOutstanding: number;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* The most candidates one account's sweep pulls per cycle.
|
|
90
|
+
*
|
|
91
|
+
* Bounded because this runs inside the sampler's 60-second loop and the aged set
|
|
92
|
+
* does not shrink on its own: only PRUNABLE rows leave it, so an account whose
|
|
93
|
+
* routines have stalled would otherwise grow an unbounded fetch for ever. The
|
|
94
|
+
* batch is ordered oldest-first, and a capped sweep drains across cycles.
|
|
95
|
+
* `capped=true` on the log line is what stops a truncated pass reading as a
|
|
96
|
+
* complete one.
|
|
97
|
+
*/
|
|
98
|
+
export declare const RETENTION_CANDIDATE_CAP = 5000;
|
|
99
|
+
/**
|
|
100
|
+
* The graph operations the sweep needs, injected exactly as `SamplerDeps` is, so
|
|
101
|
+
* every branch above is testable without Neo4j and the Cypher lives in one place.
|
|
102
|
+
*/
|
|
103
|
+
export interface RetentionDeps {
|
|
104
|
+
/** Distinct accountIds holding at least one `:Section {source:'email'}`. */
|
|
105
|
+
listEmailAccountIds: () => Promise<string[]>;
|
|
106
|
+
/** Every `:Event` on the account that carries a gate, enabled or suspended. */
|
|
107
|
+
listGateArgs: (accountId: string) => Promise<GateRow[]>;
|
|
108
|
+
/** Email sections older than `cutoff`, oldest first, with their flag lists. */
|
|
109
|
+
listAgedSections: (accountId: string, cutoff: string, limit: number) => Promise<AgedSection[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Repair the `:NEXT` chain across the span and delete it, as ONE unit.
|
|
112
|
+
*
|
|
113
|
+
* A single call rather than a repair and a delete the sweep sequences itself,
|
|
114
|
+
* because the repair MERGEs `(p)-[:NEXT]->(target)` while `p`'s edge to the
|
|
115
|
+
* first doomed section still exists and relies on the delete to remove it. Two
|
|
116
|
+
* calls means a delete failure leaves `p` with two outgoing `:NEXT` edges and
|
|
117
|
+
* the reading order forked. Retrying next cycle recovers it only while the
|
|
118
|
+
* sections stay prunable, and a routine added in between makes them
|
|
119
|
+
* outstanding again, so the fork would persist with nothing left to fix it.
|
|
120
|
+
*/
|
|
121
|
+
pruneSections: (accountId: string, ids: string[]) => Promise<{
|
|
122
|
+
repaired: number;
|
|
123
|
+
pruned: number;
|
|
124
|
+
}>;
|
|
125
|
+
now: () => Date;
|
|
126
|
+
log: (line: string) => void;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Sweep one account.
|
|
130
|
+
*
|
|
131
|
+
* The empty interested set is the load-bearing branch: it deletes NOTHING and
|
|
132
|
+
* says so. Read literally, "flagged by every interested routine" is vacuously
|
|
133
|
+
* true over an empty set, which on every install today — no shipped routine
|
|
134
|
+
* carries a `graph-unflagged` check until Task 2686 — would delete the whole
|
|
135
|
+
* email archive older than N on the first sweep. An empty set means nobody has
|
|
136
|
+
* consented to this data being processed, not that everybody has.
|
|
137
|
+
*/
|
|
138
|
+
export declare function sweepAccount(deps: RetentionDeps, accountId: string, days: number): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* One retention pass over every account holding email sections.
|
|
141
|
+
*
|
|
142
|
+
* Accounts come from the DATA, not from the routine set: an account holding
|
|
143
|
+
* email and no routine is exactly the one whose `interested=0` line the operator
|
|
144
|
+
* needs to see, and enumerating from routines would make it invisible.
|
|
145
|
+
*
|
|
146
|
+
* One account's failure is named and never stops the next, matching the arms in
|
|
147
|
+
* `main.ts`.
|
|
148
|
+
*/
|
|
149
|
+
export declare function runRetention(deps: RetentionDeps, env: NodeJS.ProcessEnv): Promise<void>;
|
|
150
|
+
//# sourceMappingURL=retention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/sampler/retention.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAM1E;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;mDACmD;AACnD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CAqB9D;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EAAE,EACnB,IAAI,EAAE,cAAc,GACnB;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAcjD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,+EAA+E;IAC/E,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,+EAA+E;IAC/E,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/F;;;;;;;;;;OAUG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnG,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// The standing email-retention sweep (Task 2685): the deterministic half of the
|
|
2
|
+
// sampler. Ingest writes every inbound message (Task 2682); this removes the
|
|
3
|
+
// sections every interested routine has finished with, so the graph stops
|
|
4
|
+
// growing without bound. Never an agent judgement about what is unwanted — the
|
|
5
|
+
// predicate is a set membership and an age, and nothing else.
|
|
6
|
+
/**
|
|
7
|
+
* The configured retention period in whole days, or null.
|
|
8
|
+
*
|
|
9
|
+
* Null means PRUNE NOTHING, and every unreadable value resolves to it: unset,
|
|
10
|
+
* empty, zero, negative, fractional, non-numeric. Deletion is a thing the
|
|
11
|
+
* operator turns on per install, never a default, because the failure direction
|
|
12
|
+
* here is unrecoverable — the 2026-04-20 incident that ended autonomous graph
|
|
13
|
+
* hygiene rules is recorded at `memory/mcp/src/lib/graph-prune.ts:6`.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveRetentionDays(env) {
|
|
16
|
+
const raw = env.EMAIL_RETENTION_DAYS;
|
|
17
|
+
if (raw === undefined || raw.trim() === "")
|
|
18
|
+
return null;
|
|
19
|
+
const n = Number(raw);
|
|
20
|
+
if (!Number.isInteger(n) || n <= 0 || n > RETENTION_MAX_DAYS)
|
|
21
|
+
return null;
|
|
22
|
+
return n;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The largest period this accepts, a hundred years.
|
|
26
|
+
*
|
|
27
|
+
* An upper bound and not only a lower one, because `cutoffIso` subtracts
|
|
28
|
+
* `days * 86_400_000` milliseconds and a value past the ±8.64e15 Date range
|
|
29
|
+
* yields an Invalid Date whose `toISOString()` throws. Without this, a fat-finger
|
|
30
|
+
* `EMAIL_RETENTION_DAYS` passes the integer guard and then throws once per
|
|
31
|
+
* account per cycle for ever, reported as a retention error rather than as the
|
|
32
|
+
* bad configuration it is. Anything beyond a century is a typo, and refusing it
|
|
33
|
+
* here prunes nothing, which is the same safe direction as every other
|
|
34
|
+
* unreadable value.
|
|
35
|
+
*/
|
|
36
|
+
export const RETENTION_MAX_DAYS = 36_500;
|
|
37
|
+
/**
|
|
38
|
+
* The instant a section must predate to be old enough to prune.
|
|
39
|
+
*
|
|
40
|
+
* Emitted through `toISOString()` because every `:Section.createdAt` is written
|
|
41
|
+
* the same way through a writer-owned key the ingest's reserved list forbids
|
|
42
|
+
* content from setting (`memory/mcp/src/tools/memory-ingest.ts:222-238`). Both
|
|
43
|
+
* sides therefore have the same fixed-width shape, which is what makes the
|
|
44
|
+
* lexical comparison in the Cypher equal to a chronological one.
|
|
45
|
+
*/
|
|
46
|
+
export function cutoffIso(now, days) {
|
|
47
|
+
return new Date(now.getTime() - days * 86_400_000).toISOString();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Which routines are interested in this account's email nodes, split by grain.
|
|
51
|
+
*
|
|
52
|
+
* A routine gated on `ConversationArchive` counts as interested in the sections
|
|
53
|
+
* underneath that archive (operator decision 2026-08-13): it reads them, so
|
|
54
|
+
* pruning one it has not flagged would strip content out from under a routine
|
|
55
|
+
* that never saw it. The two sets are consulted at different grains because that
|
|
56
|
+
* is where the dispatcher writes their flags — a `Section`-gated routine's id
|
|
57
|
+
* lands on the section, a `ConversationArchive`-gated routine's on the parent.
|
|
58
|
+
*
|
|
59
|
+
* A gate this cannot read contributes NOTHING and never throws. That is the safe
|
|
60
|
+
* direction in both halves: an unreadable gate shrinks the interested set, and a
|
|
61
|
+
* smaller set can only make MORE sections prunable — so it is paired with the
|
|
62
|
+
* empty-set rule in `sweepAccount`, which refuses to prune on a set of nobody.
|
|
63
|
+
*/
|
|
64
|
+
export function interestedSets(rows) {
|
|
65
|
+
const section = new Set();
|
|
66
|
+
const archive = new Set();
|
|
67
|
+
for (const row of rows) {
|
|
68
|
+
if (!row.gateArgs)
|
|
69
|
+
continue;
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(row.gateArgs);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const checks = parsed?.checks;
|
|
78
|
+
if (!Array.isArray(checks))
|
|
79
|
+
continue;
|
|
80
|
+
for (const check of checks) {
|
|
81
|
+
const c = check;
|
|
82
|
+
if (c?.type !== "graph-unflagged")
|
|
83
|
+
continue;
|
|
84
|
+
if (c.label === "Section")
|
|
85
|
+
section.add(row.eventId);
|
|
86
|
+
else if (c.label === "ConversationArchive")
|
|
87
|
+
archive.add(row.eventId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { section: [...section], archive: [...archive] };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Split aged candidates into the ones every interested routine has finished with
|
|
94
|
+
* and a count of the ones still outstanding for somebody.
|
|
95
|
+
*
|
|
96
|
+
* Age is NOT re-checked here: the caller's Cypher filtered on the cutoff, so a
|
|
97
|
+
* row reaching this function is old enough by construction. The predicate is
|
|
98
|
+
* membership only.
|
|
99
|
+
*
|
|
100
|
+
* A flag from a routine that is no longer interested is ignored rather than
|
|
101
|
+
* required, because the set is derived from the gates that exist NOW. A deleted
|
|
102
|
+
* routine must not pin the archive for ever.
|
|
103
|
+
*/
|
|
104
|
+
export function partitionAged(rows, sets) {
|
|
105
|
+
const prunable = [];
|
|
106
|
+
let keptOutstanding = 0;
|
|
107
|
+
for (const row of rows) {
|
|
108
|
+
const sectionDone = sets.section.every((id) => row.processedBy.includes(id));
|
|
109
|
+
// A missing parent fails this arm even when `sets.archive` is empty: an
|
|
110
|
+
// orphan section is a shape nothing here wrote, and keeping data is the
|
|
111
|
+
// recoverable direction.
|
|
112
|
+
const parent = row.parentProcessedBy;
|
|
113
|
+
const archiveDone = parent !== null && sets.archive.every((id) => parent.includes(id));
|
|
114
|
+
if (sectionDone && archiveDone)
|
|
115
|
+
prunable.push(row.id);
|
|
116
|
+
else
|
|
117
|
+
keptOutstanding += 1;
|
|
118
|
+
}
|
|
119
|
+
return { prunable, keptOutstanding };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The most candidates one account's sweep pulls per cycle.
|
|
123
|
+
*
|
|
124
|
+
* Bounded because this runs inside the sampler's 60-second loop and the aged set
|
|
125
|
+
* does not shrink on its own: only PRUNABLE rows leave it, so an account whose
|
|
126
|
+
* routines have stalled would otherwise grow an unbounded fetch for ever. The
|
|
127
|
+
* batch is ordered oldest-first, and a capped sweep drains across cycles.
|
|
128
|
+
* `capped=true` on the log line is what stops a truncated pass reading as a
|
|
129
|
+
* complete one.
|
|
130
|
+
*/
|
|
131
|
+
export const RETENTION_CANDIDATE_CAP = 5000;
|
|
132
|
+
/**
|
|
133
|
+
* Sweep one account.
|
|
134
|
+
*
|
|
135
|
+
* The empty interested set is the load-bearing branch: it deletes NOTHING and
|
|
136
|
+
* says so. Read literally, "flagged by every interested routine" is vacuously
|
|
137
|
+
* true over an empty set, which on every install today — no shipped routine
|
|
138
|
+
* carries a `graph-unflagged` check until Task 2686 — would delete the whole
|
|
139
|
+
* email archive older than N on the first sweep. An empty set means nobody has
|
|
140
|
+
* consented to this data being processed, not that everybody has.
|
|
141
|
+
*/
|
|
142
|
+
export async function sweepAccount(deps, accountId, days) {
|
|
143
|
+
const sets = interestedSets(await deps.listGateArgs(accountId));
|
|
144
|
+
const interested = sets.section.length + sets.archive.length;
|
|
145
|
+
// `repaired` rides on the line rather than being discarded: a repair that
|
|
146
|
+
// matched nothing while the delete still removed the sections leaves the chain
|
|
147
|
+
// broken, and the damage surfaces much later and elsewhere, when the next
|
|
148
|
+
// ingest picks one of two tailless sections and appends to the middle of a
|
|
149
|
+
// conversation. `pruned>0 repaired=0` on a non-prefix span is the signature.
|
|
150
|
+
const line = (pruned, keptOutstanding, repaired, capped) => deps.log(`op=email-retention account=${accountId} interested=${interested} ` +
|
|
151
|
+
`pruned=${pruned} kept-outstanding=${keptOutstanding} repaired=${repaired} ` +
|
|
152
|
+
`ageDays=${days}` +
|
|
153
|
+
(capped ? " capped=true" : ""));
|
|
154
|
+
if (interested === 0) {
|
|
155
|
+
line(0, 0, 0, false);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const cutoff = cutoffIso(deps.now(), days);
|
|
159
|
+
const rows = await deps.listAgedSections(accountId, cutoff, RETENTION_CANDIDATE_CAP);
|
|
160
|
+
const capped = rows.length >= RETENTION_CANDIDATE_CAP;
|
|
161
|
+
const { prunable, keptOutstanding } = partitionAged(rows, sets);
|
|
162
|
+
if (prunable.length === 0) {
|
|
163
|
+
line(0, keptOutstanding, 0, capped);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const { repaired, pruned } = await deps.pruneSections(accountId, prunable);
|
|
167
|
+
line(pruned, keptOutstanding, repaired, capped);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* One retention pass over every account holding email sections.
|
|
171
|
+
*
|
|
172
|
+
* Accounts come from the DATA, not from the routine set: an account holding
|
|
173
|
+
* email and no routine is exactly the one whose `interested=0` line the operator
|
|
174
|
+
* needs to see, and enumerating from routines would make it invisible.
|
|
175
|
+
*
|
|
176
|
+
* One account's failure is named and never stops the next, matching the arms in
|
|
177
|
+
* `main.ts`.
|
|
178
|
+
*/
|
|
179
|
+
export async function runRetention(deps, env) {
|
|
180
|
+
const days = resolveRetentionDays(env);
|
|
181
|
+
if (days === null) {
|
|
182
|
+
// Emitted every cycle, deliberately. Falling silent when the period is unset
|
|
183
|
+
// would make "retention is switched off" and "the sweep never ran" the same
|
|
184
|
+
// observation, which is the one distinction an operator reading this log
|
|
185
|
+
// needs and the reason every other pass here reports its zero.
|
|
186
|
+
deps.log("op=email-retention account=- interested=0 pruned=0 kept-outstanding=0 repaired=0 ageDays=unset");
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const accountIds = await deps.listEmailAccountIds();
|
|
190
|
+
for (const accountId of accountIds) {
|
|
191
|
+
try {
|
|
192
|
+
await sweepAccount(deps, accountId, days);
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
deps.log(`op=email-retention-error account=${accountId} detail=${e instanceof Error ? e.message : String(e)}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=retention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/sampler/retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,11 @@ export interface SampleResult {
|
|
|
34
34
|
* Sample one mailbox: fetch inbound UIDs above the sampler's own cursor, write
|
|
35
35
|
* them to the graph, and advance the cursor — but only after a successful write.
|
|
36
36
|
*
|
|
37
|
+
* Every line carries `provider=imap` (Task 2683). Without it `provider=` is not
|
|
38
|
+
* a total filter once the Outlook arm shares this log: filtering on it would
|
|
39
|
+
* return zero IMAP rows, and absence-means-IMAP would become a convention a
|
|
40
|
+
* third arm inherits wrongly.
|
|
41
|
+
*
|
|
37
42
|
* Cases, in order:
|
|
38
43
|
* - fetch throws → log op=sample-error, cursor unchanged, retried next cycle.
|
|
39
44
|
* - the mailbox's live uidValidity differs from the stored one → the stored UID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample-mailbox.d.ts","sourceRoot":"","sources":["../../src/sampler/sample-mailbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CACV,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,KAC7B,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAChF,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3G,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgCD
|
|
1
|
+
{"version":3,"file":"sample-mailbox.d.ts","sourceRoot":"","sources":["../../src/sampler/sample-mailbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CACV,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,KAC7B,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAChF,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3G,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAoCrG"}
|
|
@@ -30,6 +30,11 @@ function toEmailData(e, accountId, config, uidValidity) {
|
|
|
30
30
|
* Sample one mailbox: fetch inbound UIDs above the sampler's own cursor, write
|
|
31
31
|
* them to the graph, and advance the cursor — but only after a successful write.
|
|
32
32
|
*
|
|
33
|
+
* Every line carries `provider=imap` (Task 2683). Without it `provider=` is not
|
|
34
|
+
* a total filter once the Outlook arm shares this log: filtering on it would
|
|
35
|
+
* return zero IMAP rows, and absence-means-IMAP would become a convention a
|
|
36
|
+
* third arm inherits wrongly.
|
|
37
|
+
*
|
|
33
38
|
* Cases, in order:
|
|
34
39
|
* - fetch throws → log op=sample-error, cursor unchanged, retried next cycle.
|
|
35
40
|
* - the mailbox's live uidValidity differs from the stored one → the stored UID
|
|
@@ -50,16 +55,16 @@ export async function sampleMailbox(deps, account) {
|
|
|
50
55
|
result = await deps.fetchSince(config, password, sinceUid, deps.recipients(config));
|
|
51
56
|
}
|
|
52
57
|
catch (e) {
|
|
53
|
-
deps.log(`op=sample-error mailbox=${box} detail=${msg(e)}`);
|
|
58
|
+
deps.log(`op=sample-error mailbox=${box} provider=imap detail=${msg(e)}`);
|
|
54
59
|
return { mailbox: box, fetched: 0, cursor: sinceUid, error: msg(e) };
|
|
55
60
|
}
|
|
56
61
|
if (stored?.uidValidity != null && stored.uidValidity !== result.uidValidity) {
|
|
57
62
|
await deps.advanceCursor(accountId, box, 0, result.uidValidity);
|
|
58
|
-
deps.log(`op=sample mailbox=${box} fetched=0 cursor=0 note=uidvalidity-reset`);
|
|
63
|
+
deps.log(`op=sample mailbox=${box} provider=imap fetched=0 cursor=0 note=uidvalidity-reset`);
|
|
59
64
|
return { mailbox: box, fetched: 0, cursor: 0 };
|
|
60
65
|
}
|
|
61
66
|
if (result.emails.length === 0) {
|
|
62
|
-
deps.log(`op=sample mailbox=${box} fetched=0 cursor=${sinceUid}`);
|
|
67
|
+
deps.log(`op=sample mailbox=${box} provider=imap fetched=0 cursor=${sinceUid}`);
|
|
63
68
|
return { mailbox: box, fetched: 0, cursor: sinceUid };
|
|
64
69
|
}
|
|
65
70
|
const messages = result.emails.map((e) => toEmailData(e, accountId, config, result.uidValidity));
|
|
@@ -67,11 +72,11 @@ export async function sampleMailbox(deps, account) {
|
|
|
67
72
|
await deps.write(messages);
|
|
68
73
|
}
|
|
69
74
|
catch (e) {
|
|
70
|
-
deps.log(`op=sample-error mailbox=${box} detail=${msg(e)}`);
|
|
75
|
+
deps.log(`op=sample-error mailbox=${box} provider=imap detail=${msg(e)}`);
|
|
71
76
|
return { mailbox: box, fetched: messages.length, cursor: sinceUid, error: msg(e) };
|
|
72
77
|
}
|
|
73
78
|
await deps.advanceCursor(accountId, box, result.maxUid, result.uidValidity);
|
|
74
|
-
deps.log(`op=sample mailbox=${box} fetched=${messages.length} cursor=${result.maxUid}`);
|
|
79
|
+
deps.log(`op=sample mailbox=${box} provider=imap fetched=${messages.length} cursor=${result.maxUid}`);
|
|
75
80
|
return { mailbox: box, fetched: messages.length, cursor: result.maxUid };
|
|
76
81
|
}
|
|
77
82
|
//# sourceMappingURL=sample-mailbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample-mailbox.js","sourceRoot":"","sources":["../../src/sampler/sample-mailbox.ts"],"names":[],"mappings":"AAqCA,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;oFAIoF;AACpF,SAAS,WAAW,CAAC,CAAe,EAAE,SAAiB,EAAE,MAAmB,EAAE,WAAmB;IAC/F,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,WAAW;QACX,OAAO,EAAE,OAAO;QAChB,gBAAgB,EAAE,MAAM,CAAC,KAAK;QAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,IAAI;QAClB,SAAS;QACT,SAAS,EAAE,YAAY;QACvB,eAAe,EAAE,gBAAgB;KAClC,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"sample-mailbox.js","sourceRoot":"","sources":["../../src/sampler/sample-mailbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,5 +100,16 @@ describe("stripReservedSectionProperties", () => {
|
|
|
100
100
|
expect(RESERVED_SECTION_PROPERTY_KEYS.has(k)).toBe(true);
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
|
+
// Task 2684 — the scheduling gate's per-node processed flag. Not stamped by
|
|
104
|
+
// `baseProps`, so nothing above would have caught it: a section carrying a
|
|
105
|
+
// routine's own event id in this list reads as already processed and that
|
|
106
|
+
// routine never wakes on it. Silencing a check is a worse outcome than the
|
|
107
|
+
// paraphrase smuggle the strip was built for, and the properties bag is
|
|
108
|
+
// classifier output over ingested content.
|
|
109
|
+
it("strips gateProcessedBy, so ingested content cannot pre-flag itself", () => {
|
|
110
|
+
const result = stripReservedSectionProperties({ gateProcessedBy: ["65ef758c-0000-4000-8000-000000000000"], role: "Engineer" }, { kind: "Chapter", identity: "attachmentId=att-9" });
|
|
111
|
+
expect(result).toEqual({ role: "Engineer" });
|
|
112
|
+
expect(logSpy.mock.calls[0][0]).toContain("keys=gateProcessedBy");
|
|
113
|
+
});
|
|
103
114
|
});
|
|
104
115
|
//# sourceMappingURL=memory-ingest-section-properties-strip.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-ingest-section-properties-strip.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-ingest-section-properties-strip.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-ingest-section-properties-strip.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-ingest-section-properties-strip.test.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,mEAAmE;AAEnE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAI,MAAmC,CAAC;IAExC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,8BAA8B,CAC3C,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,EACrD,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CACpD,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,MAAM,GAAG,8BAA8B,CAC3C,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EACpE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CACrD,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,CAAC,GAAG,CAAC;YAChB,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK;SACZ,CAAC;QACF,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,EAAE;YACrD,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,+CAA+C;SAC1D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAClD,8BAA8B,CAAC,KAAK,EAAE;YACpC,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,8BAA8B,CAC3C,EAAE,EACF,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CACpD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,uEAAuE;QACvE,oEAAoE;QACpE,iCAAiC;QACjC,MAAM,KAAK,GAAG;YACZ,WAAW;YACX,OAAO;YACP,MAAM;YACN,aAAa;YACb,SAAS;YACT,WAAW;YACX,UAAU;YACV,OAAO;YACP,WAAW;YACX,WAAW;YACX,gBAAgB;YAChB,iBAAiB;YACjB,kBAAkB;YAClB,QAAQ;YACR,kBAAkB;YAClB,eAAe;YACf,mBAAmB;SACpB,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,2CAA2C;IAC3C,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,8BAA8B,CAC3C,EAAE,eAAe,EAAE,CAAC,sCAAsC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAC/E,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CACpD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-ingest.d.ts","sourceRoot":"","sources":["../../src/tools/memory-ingest.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAGzG,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AA4E3C,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,EACtF,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAkB,GAC5B,MAAM,EAAE,CAyEV;AA8BD,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"memory-ingest.d.ts","sourceRoot":"","sources":["../../src/tools/memory-ingest.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAGzG,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AA4E3C,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,EACtF,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAkB,GAC5B,MAAM,EAAE,CAyEV;AA8BD,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CA0B7D,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,qEAAqE;IACrE,aAAa,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAClD,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IAOnB;;oEAEgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;mDAC+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;4BAEwB;IACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;yFACqF;IACrF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;wCAEoC;IACpC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;;;kCAI8B;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B;;;;;;;;;;;uDAWmD;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;2CAMuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;8CAO0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,aAAa,EAAE,aAAa,CAAC;IAC7B,mFAAmF;IACnF,aAAa,EAAE,aAAa,CAAC;IAC7B,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;2EAIuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnD;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACjD;AAuDD,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAqB9E"}
|
|
@@ -182,6 +182,14 @@ export const RESERVED_SECTION_PROPERTY_KEYS = new Set([
|
|
|
182
182
|
"sourceDocumentId",
|
|
183
183
|
"archiveSha256",
|
|
184
184
|
"archiveSourceFile",
|
|
185
|
+
// Task 2684 — the routine ids that have processed this node, written by the
|
|
186
|
+
// scheduling dispatcher and read by a `graph-unflagged` gate check. Reserved
|
|
187
|
+
// for the reason every key above is, and with a sharper consequence: a section
|
|
188
|
+
// arriving with a routine's own event id already in this list reads as ALREADY
|
|
189
|
+
// PROCESSED, so the routine never wakes on it. The classifier's properties bag
|
|
190
|
+
// comes from ingested content, which makes this the one smuggle slot that
|
|
191
|
+
// silences a check rather than misreporting a field.
|
|
192
|
+
"gateProcessedBy",
|
|
185
193
|
]);
|
|
186
194
|
/**
|
|
187
195
|
* Drop reserved writer-owned keys from an agent-supplied `section.properties`
|