crewly 1.20.393 → 1.20.395
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/config/constants.ts +16 -0
- package/config/index.ts +2 -0
- package/config/skills/agent/core/complete-task/SKILL.md +18 -0
- package/config/skills/agent/core/complete-task/execute.sh +16 -2
- package/config/skills/agent/core/complete-task/execute.test.sh +18 -0
- package/config/skills/agent/core/get-my-active-work/execute.sh +1 -1
- package/config/skills/agent/core/get-my-context/SKILL.md +5 -0
- package/config/skills/agent/core/get-my-context/execute.sh +11 -1
- package/config/skills/agent/core/get-my-tasks/SKILL.md +2 -1
- package/config/skills/agent/core/get-my-tasks/execute.sh +18 -4
- package/config/skills/team-leader/verify-output/execute.sh +6 -0
- package/config/skills/team-leader/verify-output/execute.test.sh +9 -0
- package/config/sops/common/blocker-handling.md +5 -0
- package/config/sops/common/communication-protocol.md +5 -0
- package/config/sops/common/dev-process-tiers.md +5 -0
- package/config/sops/common/mid-flight-milestone-surface.md +5 -0
- package/config/sops/common/owner-facing-communication.md +5 -0
- package/config/sops/common/writing-for-agents.md +5 -0
- package/config/sops/developer/coding-standards.md +5 -0
- package/config/sops/developer/debugging.md +5 -0
- package/config/sops/developer/git-workflow.md +5 -0
- package/config/sops/developer/testing-requirements.md +5 -0
- package/config/sops/pm/progress-tracking.md +5 -0
- package/config/sops/pm/task-decomposition.md +5 -0
- package/config/sops/qa/testing-procedures.md +5 -0
- package/dist/backend/backend/src/constants.d.ts +43 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +47 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +11 -2
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +5 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +21 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/check-rule-metadata.d.ts +91 -0
- package/dist/backend/backend/src/scripts/check-rule-metadata.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/check-rule-metadata.js +214 -0
- package/dist/backend/backend/src/scripts/check-rule-metadata.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +14 -9
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +4 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +13 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +17 -22
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +3 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +4 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +6 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +6 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +3 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/stall/claim-check.d.ts +26 -2
- package/dist/backend/backend/src/services/stall/claim-check.d.ts.map +1 -1
- package/dist/backend/backend/src/services/stall/claim-check.js +44 -4
- package/dist/backend/backend/src/services/stall/claim-check.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +27 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +54 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/verified-spot-check.service.d.ts +145 -0
- package/dist/backend/backend/src/services/task-pool/verified-spot-check.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/verified-spot-check.service.js +254 -0
- package/dist/backend/backend/src/services/task-pool/verified-spot-check.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/turn-origin.d.ts +16 -4
- package/dist/backend/backend/src/services/trace/turn-origin.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/turn-origin.js +27 -9
- package/dist/backend/backend/src/services/trace/turn-origin.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +7 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/sop.types.d.ts +11 -0
- package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/sop.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +20 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +15 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +43 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +47 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +14 -9
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +4 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +13 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +17 -22
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +4 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +6 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/turn-origin.d.ts +16 -4
- package/dist/cli/backend/src/services/trace/turn-origin.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/turn-origin.js +27 -9
- package/dist/cli/backend/src/services/trace/turn-origin.js.map +1 -1
- package/dist/cli/backend/src/types/sop.types.d.ts +11 -0
- package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/sop.types.js.map +1 -1
- package/dist/cli/config/constants.d.ts +20 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +15 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim-check.js","sourceRoot":"","sources":["../../../../../../backend/src/services/stall/claim-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,CAAC,GAAG,uBAAuB,CAAC;AAoBlC,wDAAwD;AACxD,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,kDAAkD;AAClD,MAAM,OAAO,GAAG,gGAAgG,CAAC;AAEjH;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,uEAAuE;IACvE,sCAAsC;IACtC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,OAAO;QACN,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE,IAAI,CAAC;QAC5D,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;QACzD,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,mBAAmB,KAAK,EAAE,IAAI,CAAC;QAC/D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;KAC5D,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"claim-check.js","sourceRoot":"","sources":["../../../../../../backend/src/services/stall/claim-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,24 @@ export interface ArtifactStat {
|
|
|
88
88
|
* @returns Absolute base directories (may be empty)
|
|
89
89
|
*/
|
|
90
90
|
export declare function artifactBaseDirs(workItem: Pick<WorkItem, 'metadata'> | null): string[];
|
|
91
|
+
/** A named artifact that no longer checks out (crewly#1315). */
|
|
92
|
+
export interface ArtifactDiscrepancy {
|
|
93
|
+
/** The path as the worker sent it */
|
|
94
|
+
artifact: string;
|
|
95
|
+
/** What is wrong with it now */
|
|
96
|
+
problem: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Re-check a verified WorkItem's artifacts some time after completion
|
|
100
|
+
* (crewly#1315): each local artifact must still exist and be non-empty.
|
|
101
|
+
* No age check — the file was accepted then; only its presence is in
|
|
102
|
+
* question now. URLs pass as at completion. Read-only.
|
|
103
|
+
*
|
|
104
|
+
* @param workItem - The WorkItem (its `output.evidence` is read)
|
|
105
|
+
* @param options - File check and home directory, injectable for tests
|
|
106
|
+
* @returns One entry per artifact that is gone or empty; empty when all hold
|
|
107
|
+
*/
|
|
108
|
+
export declare function recheckArtifacts(workItem: Pick<WorkItem, 'output' | 'metadata'>, options?: Pick<EvidenceCheckOptions, 'statPath' | 'homeDir'>): Promise<ArtifactDiscrepancy[]>;
|
|
91
109
|
/**
|
|
92
110
|
* The oldest mtime a file artifact may have: the WorkItem's creation minus
|
|
93
111
|
* {@link COMPLETION_EVIDENCE_CONSTANTS.STALE_GRACE_MS}.
|
|
@@ -113,6 +131,15 @@ export declare function blockedReason(blocked: BlockedEvidence[]): string;
|
|
|
113
131
|
* @param output - The completed WorkItem's `output` (evidence at `output.evidence`)
|
|
114
132
|
* @returns A sentence starting with "Evidence:"
|
|
115
133
|
*/
|
|
134
|
+
/**
|
|
135
|
+
* The worker's decision record (#875), read by the reviewer beside the
|
|
136
|
+
* evidence: the key decisions made, the options considered and not taken
|
|
137
|
+
* (with the reason), and the assumptions relied on. Each is an optional list
|
|
138
|
+
* of short strings on the completion result (a lone string counts as one
|
|
139
|
+
* entry). Returns '' when the worker recorded none, so a brief without one
|
|
140
|
+
* stays as it was.
|
|
141
|
+
*/
|
|
142
|
+
export declare function describeDecisionsForReviewer(output: Record<string, unknown> | undefined): string;
|
|
116
143
|
export declare function describeEvidenceForReviewer(output: Record<string, unknown> | undefined): string;
|
|
117
144
|
/**
|
|
118
145
|
* Decide what a completion does from its evidence block.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-evidence.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/completion-evidence.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAIlE,2DAA2D;AAC3D,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAClE,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,uBAAuB,CAI5G;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CActF;
|
|
1
|
+
{"version":3,"file":"completion-evidence.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/completion-evidence.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAIlE,2DAA2D;AAC3D,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAClE,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,uBAAuB,CAI5G;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CActF;AAmED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,EAC/C,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,SAAS,CAAM,GAC/D,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAYhC;AAwBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG7F;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAEhE;AAED;;;;;;;;;GASG;AACH;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAWhG;AAQD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAa/F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,EACpF,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CA8D3B;AAED,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBnE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,GAAG,oBAAoB,CA+CnI"}
|
|
@@ -153,6 +153,32 @@ async function checkArtifact(artifact, bases, options) {
|
|
|
153
153
|
problem: `"${raw}" does not exist (looked in ${bases.join(', ')})`,
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Re-check a verified WorkItem's artifacts some time after completion
|
|
158
|
+
* (crewly#1315): each local artifact must still exist and be non-empty.
|
|
159
|
+
* No age check — the file was accepted then; only its presence is in
|
|
160
|
+
* question now. URLs pass as at completion. Read-only.
|
|
161
|
+
*
|
|
162
|
+
* @param workItem - The WorkItem (its `output.evidence` is read)
|
|
163
|
+
* @param options - File check and home directory, injectable for tests
|
|
164
|
+
* @returns One entry per artifact that is gone or empty; empty when all hold
|
|
165
|
+
*/
|
|
166
|
+
export async function recheckArtifacts(workItem, options = {}) {
|
|
167
|
+
const v = validateCompletionEvidence(workItem.output?.['evidence']);
|
|
168
|
+
if (!v.ok)
|
|
169
|
+
return [];
|
|
170
|
+
const bases = artifactBaseDirs(workItem);
|
|
171
|
+
const opts = { statPath: options.statPath ?? defaultStatPath, homeDir: options.homeDir ?? os.homedir(), notBeforeMs: null };
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const e of v.evidence) {
|
|
174
|
+
if (e.type !== 'artifact')
|
|
175
|
+
continue;
|
|
176
|
+
const check = await checkArtifact(e, bases, opts);
|
|
177
|
+
if (!check.ok)
|
|
178
|
+
out.push({ artifact: e.path, problem: check.problem });
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
156
182
|
/**
|
|
157
183
|
* An existing local artifact: a file must have content and be newer than the
|
|
158
184
|
* WorkItem (a placeholder or an earlier task's output is not evidence).
|
|
@@ -206,6 +232,34 @@ export function blockedReason(blocked) {
|
|
|
206
232
|
* @param output - The completed WorkItem's `output` (evidence at `output.evidence`)
|
|
207
233
|
* @returns A sentence starting with "Evidence:"
|
|
208
234
|
*/
|
|
235
|
+
/**
|
|
236
|
+
* The worker's decision record (#875), read by the reviewer beside the
|
|
237
|
+
* evidence: the key decisions made, the options considered and not taken
|
|
238
|
+
* (with the reason), and the assumptions relied on. Each is an optional list
|
|
239
|
+
* of short strings on the completion result (a lone string counts as one
|
|
240
|
+
* entry). Returns '' when the worker recorded none, so a brief without one
|
|
241
|
+
* stays as it was.
|
|
242
|
+
*/
|
|
243
|
+
export function describeDecisionsForReviewer(output) {
|
|
244
|
+
const blocks = [];
|
|
245
|
+
for (const field of C.DECISION_FIELDS) {
|
|
246
|
+
const entries = decisionEntries(output?.[field]);
|
|
247
|
+
if (entries.length === 0)
|
|
248
|
+
continue;
|
|
249
|
+
const shown = entries.slice(0, C.REVIEW_LISTED_DECISIONS).map((e) => ` - ${e.slice(0, C.DECISION_ENTRY_MAX_CHARS)}`);
|
|
250
|
+
if (entries.length > shown.length)
|
|
251
|
+
shown.push(` … and ${entries.length - shown.length} more`);
|
|
252
|
+
blocks.push(`${C.DECISION_LABELS[field]}:\n${shown.join('\n')}`);
|
|
253
|
+
}
|
|
254
|
+
if (blocks.length === 0)
|
|
255
|
+
return '';
|
|
256
|
+
return `Worker's record — check these hold, not only that the work exists:\n${blocks.join('\n')}`;
|
|
257
|
+
}
|
|
258
|
+
/** One decision field as a list of non-empty strings; anything else is nothing. */
|
|
259
|
+
function decisionEntries(raw) {
|
|
260
|
+
const list = typeof raw === 'string' ? [raw] : Array.isArray(raw) ? raw : [];
|
|
261
|
+
return list.filter((e) => typeof e === 'string' && e.trim().length > 0).map((e) => e.trim());
|
|
262
|
+
}
|
|
209
263
|
export function describeEvidenceForReviewer(output) {
|
|
210
264
|
const v = validateCompletionEvidence(output?.['evidence']);
|
|
211
265
|
const evidence = v.ok ? v.evidence : [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-evidence.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/completion-evidence.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"completion-evidence.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/completion-evidence.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { ComponentLogger } from '../core/logger.service.js';
|
|
2
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
3
|
+
import { type ArtifactDiscrepancy } from './completion-evidence.service.js';
|
|
4
|
+
/** One sampled WorkItem whose artifact is no longer where it was. */
|
|
5
|
+
export interface SpotCheckDiscrepancy extends ArtifactDiscrepancy {
|
|
6
|
+
workItemId: string;
|
|
7
|
+
title: string;
|
|
8
|
+
}
|
|
9
|
+
/** The outcome of one run. */
|
|
10
|
+
export interface SpotCheckResult {
|
|
11
|
+
/** When the run happened (ISO) */
|
|
12
|
+
at: string;
|
|
13
|
+
/** Verified items completed within the window that named an artifact */
|
|
14
|
+
candidates: number;
|
|
15
|
+
/** How many of them were re-checked */
|
|
16
|
+
sampled: number;
|
|
17
|
+
discrepancies: SpotCheckDiscrepancy[];
|
|
18
|
+
}
|
|
19
|
+
/** Hooks the service needs; tests pass fakes. */
|
|
20
|
+
export interface VerifiedSpotCheckDeps {
|
|
21
|
+
/** Every WorkItem in the pool */
|
|
22
|
+
getItems: () => Promise<WorkItem[]>;
|
|
23
|
+
/** One plain notice to the owner; resolves true when delivered */
|
|
24
|
+
notifyOwner: (notice: {
|
|
25
|
+
title: string;
|
|
26
|
+
message: string;
|
|
27
|
+
urgent: boolean;
|
|
28
|
+
}) => Promise<boolean>;
|
|
29
|
+
/** State file (under CREWLY_HOME) */
|
|
30
|
+
stateFile: string;
|
|
31
|
+
/** Re-check one WorkItem's artifacts (defaults to the evidence service's check) */
|
|
32
|
+
recheck?: (workItem: WorkItem) => Promise<ArtifactDiscrepancy[]>;
|
|
33
|
+
now?: () => Date;
|
|
34
|
+
logger?: ComponentLogger;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether a WorkItem is a candidate: verified, completed within the window,
|
|
38
|
+
* and naming at least one artifact in its evidence.
|
|
39
|
+
*
|
|
40
|
+
* @param wi - The WorkItem
|
|
41
|
+
* @param nowMs - Clock
|
|
42
|
+
* @param windowMs - How far back a completion may be
|
|
43
|
+
* @returns True for a candidate
|
|
44
|
+
*/
|
|
45
|
+
export declare function isSpotCheckCandidate(wi: WorkItem, nowMs: number, windowMs: number): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Pick the items to re-check: all candidates when there are few, otherwise
|
|
48
|
+
* an even spread over the window (newest first) so one busy hour does not
|
|
49
|
+
* take every slot. Deterministic — the same pool gives the same sample.
|
|
50
|
+
*
|
|
51
|
+
* @param items - The pool
|
|
52
|
+
* @param nowMs - Clock
|
|
53
|
+
* @param options - Window and sample size
|
|
54
|
+
* @returns The candidates and the sample drawn from them
|
|
55
|
+
*/
|
|
56
|
+
export declare function sampleVerified(items: readonly WorkItem[], nowMs: number, options?: {
|
|
57
|
+
windowMs: number;
|
|
58
|
+
sampleSize: number;
|
|
59
|
+
}): {
|
|
60
|
+
candidates: WorkItem[];
|
|
61
|
+
sample: WorkItem[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The one line the owner reads, with the discrepancies listed under it when
|
|
65
|
+
* there are any. Zero is stated.
|
|
66
|
+
*
|
|
67
|
+
* @param result - A run's result
|
|
68
|
+
* @returns Markdown lines
|
|
69
|
+
*/
|
|
70
|
+
export declare function spotCheckLine(result: SpotCheckResult): string;
|
|
71
|
+
/**
|
|
72
|
+
* Re-check a sample of verified WorkItems. Pure apart from the file checks
|
|
73
|
+
* `recheck` performs.
|
|
74
|
+
*
|
|
75
|
+
* @param items - The pool
|
|
76
|
+
* @param now - Clock
|
|
77
|
+
* @param recheck - Re-checks one WorkItem's artifacts
|
|
78
|
+
* @param options - Window and sample size
|
|
79
|
+
* @returns The run's result
|
|
80
|
+
*/
|
|
81
|
+
export declare function runSpotCheck(items: readonly WorkItem[], now: Date, recheck: (workItem: WorkItem) => Promise<ArtifactDiscrepancy[]>, options?: {
|
|
82
|
+
windowMs: number;
|
|
83
|
+
sampleSize: number;
|
|
84
|
+
}): Promise<SpotCheckResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Runs the spot check once a day and keeps the latest result for the digest.
|
|
87
|
+
*/
|
|
88
|
+
export declare class VerifiedSpotCheckService {
|
|
89
|
+
private static instance;
|
|
90
|
+
private readonly deps;
|
|
91
|
+
private timer;
|
|
92
|
+
private bootTimer;
|
|
93
|
+
private state;
|
|
94
|
+
private running;
|
|
95
|
+
/**
|
|
96
|
+
* @param deps - Hooks
|
|
97
|
+
*/
|
|
98
|
+
constructor(deps: VerifiedSpotCheckDeps);
|
|
99
|
+
/** @returns The process-wide instance, if one was set */
|
|
100
|
+
static getInstance(): VerifiedSpotCheckService | null;
|
|
101
|
+
/**
|
|
102
|
+
* Set (or clear) the process-wide instance.
|
|
103
|
+
*
|
|
104
|
+
* @param service - The instance
|
|
105
|
+
*/
|
|
106
|
+
static setInstance(service: VerifiedSpotCheckService | null): void;
|
|
107
|
+
/**
|
|
108
|
+
* Start the daily loop: a first check after the boot delay, then every
|
|
109
|
+
* {@link VERIFIED_SPOT_CHECK_CONSTANTS.CHECK_INTERVAL_MS} it asks whether
|
|
110
|
+
* today's run is still owed.
|
|
111
|
+
*/
|
|
112
|
+
start(): void;
|
|
113
|
+
/** Stop the loop. */
|
|
114
|
+
stop(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Run today's check unless it already ran today.
|
|
117
|
+
*
|
|
118
|
+
* @returns The result, or null when today's run was already done
|
|
119
|
+
*/
|
|
120
|
+
runIfDue(): Promise<SpotCheckResult | null>;
|
|
121
|
+
/**
|
|
122
|
+
* Run the check now, record it as today's run, and tell the owner about
|
|
123
|
+
* any discrepancy.
|
|
124
|
+
*
|
|
125
|
+
* @returns The result
|
|
126
|
+
*/
|
|
127
|
+
runOnce(): Promise<SpotCheckResult>;
|
|
128
|
+
/** @returns The latest result, or null before the first run */
|
|
129
|
+
latest(): Promise<SpotCheckResult | null>;
|
|
130
|
+
/**
|
|
131
|
+
* The digest line for a given day: today's result as one line, or null
|
|
132
|
+
* when no run happened that day (the digest then says nothing about it).
|
|
133
|
+
*
|
|
134
|
+
* @param now - Clock
|
|
135
|
+
* @returns The line, or null
|
|
136
|
+
*/
|
|
137
|
+
digestLine(now: Date): Promise<string | null>;
|
|
138
|
+
/** @returns The clock */
|
|
139
|
+
private now;
|
|
140
|
+
/** @returns The state, read once */
|
|
141
|
+
private loadState;
|
|
142
|
+
/** Persist the state; a failure is logged, never thrown. */
|
|
143
|
+
private saveState;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=verified-spot-check.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/verified-spot-check.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daily spot check of verified work (crewly#1315).
|
|
3
|
+
*
|
|
4
|
+
* Once a WorkItem is `verified`, nothing looked at it again: the evidence
|
|
5
|
+
* check only confirmed an artifact existed at completion time. This service
|
|
6
|
+
* samples a few verified items from the last day and re-checks that every
|
|
7
|
+
* artifact they named still exists. It never mutates a WorkItem.
|
|
8
|
+
*
|
|
9
|
+
* - Runs once per local day (state file under CREWLY_HOME remembers the day
|
|
10
|
+
* and the result, so a restart does not re-run or re-report it).
|
|
11
|
+
* - The result is one line, "N re-checked, M discrepancies", in the evening
|
|
12
|
+
* ticket digest the owner already reads — zero is stated, not omitted.
|
|
13
|
+
* - A discrepancy also goes to the owner at once through the owner-alert
|
|
14
|
+
* notifier, with the WorkItem id and the missing artifact.
|
|
15
|
+
*
|
|
16
|
+
* Phase 1: artifacts only. Re-running `command` entries marked replayable is
|
|
17
|
+
* a later phase.
|
|
18
|
+
*
|
|
19
|
+
* @module services/task-pool/verified-spot-check.service
|
|
20
|
+
*/
|
|
21
|
+
import { VERIFIED_SPOT_CHECK_CONSTANTS } from '../../constants.js';
|
|
22
|
+
import { validateCompletionEvidence } from '../../types/v2/completion-evidence.types.js';
|
|
23
|
+
import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
|
|
24
|
+
import { localDateKey } from '../project-tickets/ticket-autopilot-decision.js';
|
|
25
|
+
import { recheckArtifacts } from './completion-evidence.service.js';
|
|
26
|
+
const C = VERIFIED_SPOT_CHECK_CONSTANTS;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a WorkItem is a candidate: verified, completed within the window,
|
|
29
|
+
* and naming at least one artifact in its evidence.
|
|
30
|
+
*
|
|
31
|
+
* @param wi - The WorkItem
|
|
32
|
+
* @param nowMs - Clock
|
|
33
|
+
* @param windowMs - How far back a completion may be
|
|
34
|
+
* @returns True for a candidate
|
|
35
|
+
*/
|
|
36
|
+
export function isSpotCheckCandidate(wi, nowMs, windowMs) {
|
|
37
|
+
if (wi.status !== 'verified')
|
|
38
|
+
return false;
|
|
39
|
+
const completed = Date.parse(wi.completedAt ?? '');
|
|
40
|
+
if (Number.isNaN(completed) || nowMs - completed > windowMs || completed > nowMs)
|
|
41
|
+
return false;
|
|
42
|
+
const v = validateCompletionEvidence(wi.output?.['evidence']);
|
|
43
|
+
return v.ok && v.evidence.some((e) => e.type === 'artifact');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Pick the items to re-check: all candidates when there are few, otherwise
|
|
47
|
+
* an even spread over the window (newest first) so one busy hour does not
|
|
48
|
+
* take every slot. Deterministic — the same pool gives the same sample.
|
|
49
|
+
*
|
|
50
|
+
* @param items - The pool
|
|
51
|
+
* @param nowMs - Clock
|
|
52
|
+
* @param options - Window and sample size
|
|
53
|
+
* @returns The candidates and the sample drawn from them
|
|
54
|
+
*/
|
|
55
|
+
export function sampleVerified(items, nowMs, options = { windowMs: C.WINDOW_MS, sampleSize: C.SAMPLE_SIZE }) {
|
|
56
|
+
const candidates = items
|
|
57
|
+
.filter((wi) => isSpotCheckCandidate(wi, nowMs, options.windowMs))
|
|
58
|
+
.sort((a, b) => Date.parse(b.completedAt ?? '') - Date.parse(a.completedAt ?? '') || a.id.localeCompare(b.id));
|
|
59
|
+
if (candidates.length <= options.sampleSize || options.sampleSize <= 0) {
|
|
60
|
+
return { candidates, sample: options.sampleSize <= 0 ? [] : candidates };
|
|
61
|
+
}
|
|
62
|
+
const step = candidates.length / options.sampleSize;
|
|
63
|
+
const sample = [];
|
|
64
|
+
for (let i = 0; i < options.sampleSize; i++) {
|
|
65
|
+
const wi = candidates[Math.floor(i * step)];
|
|
66
|
+
if (wi)
|
|
67
|
+
sample.push(wi);
|
|
68
|
+
}
|
|
69
|
+
return { candidates, sample };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The one line the owner reads, with the discrepancies listed under it when
|
|
73
|
+
* there are any. Zero is stated.
|
|
74
|
+
*
|
|
75
|
+
* @param result - A run's result
|
|
76
|
+
* @returns Markdown lines
|
|
77
|
+
*/
|
|
78
|
+
export function spotCheckLine(result) {
|
|
79
|
+
const n = result.discrepancies.length;
|
|
80
|
+
const head = `Spot check: ${result.sampled} verified item(s) from the last day re-checked, ${n} discrepanc${n === 1 ? 'y' : 'ies'}`;
|
|
81
|
+
if (n === 0)
|
|
82
|
+
return head;
|
|
83
|
+
const rows = result.discrepancies
|
|
84
|
+
.slice(0, C.MAX_LISTED_DISCREPANCIES)
|
|
85
|
+
.map((d) => `- ${d.workItemId} "${d.title.slice(0, C.TITLE_MAX_CHARS)}": ${d.problem}`);
|
|
86
|
+
if (n > rows.length)
|
|
87
|
+
rows.push(`- … and ${n - rows.length} more`);
|
|
88
|
+
return [head, ...rows].join('\n');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Re-check a sample of verified WorkItems. Pure apart from the file checks
|
|
92
|
+
* `recheck` performs.
|
|
93
|
+
*
|
|
94
|
+
* @param items - The pool
|
|
95
|
+
* @param now - Clock
|
|
96
|
+
* @param recheck - Re-checks one WorkItem's artifacts
|
|
97
|
+
* @param options - Window and sample size
|
|
98
|
+
* @returns The run's result
|
|
99
|
+
*/
|
|
100
|
+
export async function runSpotCheck(items, now, recheck, options = { windowMs: C.WINDOW_MS, sampleSize: C.SAMPLE_SIZE }) {
|
|
101
|
+
const { candidates, sample } = sampleVerified(items, now.getTime(), options);
|
|
102
|
+
const discrepancies = [];
|
|
103
|
+
for (const wi of sample) {
|
|
104
|
+
const problems = await recheck(wi).catch((err) => [
|
|
105
|
+
{ artifact: '(all)', problem: `re-check failed: ${err instanceof Error ? err.message : String(err)}` },
|
|
106
|
+
]);
|
|
107
|
+
for (const p of problems)
|
|
108
|
+
discrepancies.push({ workItemId: wi.id, title: wi.title ?? '', ...p });
|
|
109
|
+
}
|
|
110
|
+
return { at: now.toISOString(), candidates: candidates.length, sampled: sample.length, discrepancies };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Runs the spot check once a day and keeps the latest result for the digest.
|
|
114
|
+
*/
|
|
115
|
+
export class VerifiedSpotCheckService {
|
|
116
|
+
static instance = null;
|
|
117
|
+
deps;
|
|
118
|
+
timer = null;
|
|
119
|
+
bootTimer = null;
|
|
120
|
+
state = null;
|
|
121
|
+
running = null;
|
|
122
|
+
/**
|
|
123
|
+
* @param deps - Hooks
|
|
124
|
+
*/
|
|
125
|
+
constructor(deps) {
|
|
126
|
+
this.deps = deps;
|
|
127
|
+
}
|
|
128
|
+
/** @returns The process-wide instance, if one was set */
|
|
129
|
+
static getInstance() {
|
|
130
|
+
return VerifiedSpotCheckService.instance;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set (or clear) the process-wide instance.
|
|
134
|
+
*
|
|
135
|
+
* @param service - The instance
|
|
136
|
+
*/
|
|
137
|
+
static setInstance(service) {
|
|
138
|
+
VerifiedSpotCheckService.instance = service;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Start the daily loop: a first check after the boot delay, then every
|
|
142
|
+
* {@link VERIFIED_SPOT_CHECK_CONSTANTS.CHECK_INTERVAL_MS} it asks whether
|
|
143
|
+
* today's run is still owed.
|
|
144
|
+
*/
|
|
145
|
+
start() {
|
|
146
|
+
if (this.timer)
|
|
147
|
+
return;
|
|
148
|
+
this.bootTimer = setTimeout(() => void this.runIfDue(), C.BOOT_DELAY_MS);
|
|
149
|
+
this.timer = setInterval(() => void this.runIfDue(), C.CHECK_INTERVAL_MS);
|
|
150
|
+
}
|
|
151
|
+
/** Stop the loop. */
|
|
152
|
+
stop() {
|
|
153
|
+
if (this.bootTimer)
|
|
154
|
+
clearTimeout(this.bootTimer);
|
|
155
|
+
if (this.timer)
|
|
156
|
+
clearInterval(this.timer);
|
|
157
|
+
this.bootTimer = null;
|
|
158
|
+
this.timer = null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Run today's check unless it already ran today.
|
|
162
|
+
*
|
|
163
|
+
* @returns The result, or null when today's run was already done
|
|
164
|
+
*/
|
|
165
|
+
async runIfDue() {
|
|
166
|
+
if (this.running)
|
|
167
|
+
return this.running;
|
|
168
|
+
this.running = (async () => {
|
|
169
|
+
try {
|
|
170
|
+
const state = await this.loadState();
|
|
171
|
+
const today = localDateKey(this.now());
|
|
172
|
+
if (state.lastRunDate === today)
|
|
173
|
+
return null;
|
|
174
|
+
return await this.runOnce();
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
this.deps.logger?.warn('Verified spot check failed', { error: err instanceof Error ? err.message : String(err) });
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
this.running = null;
|
|
182
|
+
}
|
|
183
|
+
})();
|
|
184
|
+
return this.running;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Run the check now, record it as today's run, and tell the owner about
|
|
188
|
+
* any discrepancy.
|
|
189
|
+
*
|
|
190
|
+
* @returns The result
|
|
191
|
+
*/
|
|
192
|
+
async runOnce() {
|
|
193
|
+
const now = this.now();
|
|
194
|
+
const items = await this.deps.getItems();
|
|
195
|
+
const result = await runSpotCheck(items, now, this.deps.recheck ?? ((wi) => recheckArtifacts(wi)));
|
|
196
|
+
const state = await this.loadState();
|
|
197
|
+
state.lastRunDate = localDateKey(now);
|
|
198
|
+
state.lastResult = result;
|
|
199
|
+
await this.saveState();
|
|
200
|
+
this.deps.logger?.info('Verified spot check ran', {
|
|
201
|
+
candidates: result.candidates,
|
|
202
|
+
sampled: result.sampled,
|
|
203
|
+
discrepancies: result.discrepancies.length,
|
|
204
|
+
});
|
|
205
|
+
if (result.discrepancies.length > 0) {
|
|
206
|
+
await this.deps.notifyOwner({ title: C.OWNER_ALERT_TITLE, message: spotCheckLine(result), urgent: false }).catch(() => false);
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
/** @returns The latest result, or null before the first run */
|
|
211
|
+
async latest() {
|
|
212
|
+
return (await this.loadState()).lastResult ?? null;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* The digest line for a given day: today's result as one line, or null
|
|
216
|
+
* when no run happened that day (the digest then says nothing about it).
|
|
217
|
+
*
|
|
218
|
+
* @param now - Clock
|
|
219
|
+
* @returns The line, or null
|
|
220
|
+
*/
|
|
221
|
+
async digestLine(now) {
|
|
222
|
+
const state = await this.loadState();
|
|
223
|
+
if (!state.lastResult || state.lastRunDate !== localDateKey(now))
|
|
224
|
+
return null;
|
|
225
|
+
return spotCheckLine(state.lastResult);
|
|
226
|
+
}
|
|
227
|
+
/** @returns The clock */
|
|
228
|
+
now() {
|
|
229
|
+
return this.deps.now ? this.deps.now() : new Date();
|
|
230
|
+
}
|
|
231
|
+
/** @returns The state, read once */
|
|
232
|
+
async loadState() {
|
|
233
|
+
if (this.state)
|
|
234
|
+
return this.state;
|
|
235
|
+
const raw = await safeReadJson(this.deps.stateFile, {});
|
|
236
|
+
this.state = {
|
|
237
|
+
...(typeof raw.lastRunDate === 'string' ? { lastRunDate: raw.lastRunDate } : {}),
|
|
238
|
+
...(raw.lastResult && typeof raw.lastResult === 'object' ? { lastResult: raw.lastResult } : {}),
|
|
239
|
+
};
|
|
240
|
+
return this.state;
|
|
241
|
+
}
|
|
242
|
+
/** Persist the state; a failure is logged, never thrown. */
|
|
243
|
+
async saveState() {
|
|
244
|
+
if (!this.state)
|
|
245
|
+
return;
|
|
246
|
+
try {
|
|
247
|
+
await atomicWriteJson(this.deps.stateFile, this.state);
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
this.deps.logger?.warn('Could not save verified spot check state', { error: err instanceof Error ? err.message : String(err) });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=verified-spot-check.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/verified-spot-check.service.ts"],"names":[],"mappings":"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"}
|