@serve.zone/interfaces 32.36.1 → 32.37.0
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/changelog.md +11 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/runtimeassignmentlogs.d.ts +15 -4
- package/dist_ts/data/runtimeassignmentlogs.js +4 -2
- package/package.json +1 -1
- package/readme.md +7 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/runtimeassignmentlogs.ts +17 -5
package/changelog.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-29 - 32.37.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- A controller that keeps no workload logs answers a batch of `reportRuntimeAssignmentLogs` with
|
|
8
|
+
the named refusal `not-kept` (`TRuntimeAssignmentLogsStatus`, alongside `accepted` and `replay`):
|
|
9
|
+
it holds nothing, and the node sends no more batches on that session. The contract now states
|
|
10
|
+
that a controller answers every batch with one of the three and never leaves the method
|
|
11
|
+
unhandled, so a node tells such a controller from a failure worth retrying; a controller must
|
|
12
|
+
handle the method before a node that captures logs runs against it.
|
|
13
|
+
|
|
3
14
|
## 2026-09-29 - 32.36.1
|
|
4
15
|
|
|
5
16
|
### Fixes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '32.
|
|
6
|
+
version: '32.37.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -76,12 +76,21 @@ export interface IReportRuntimeAssignmentLogsRequest {
|
|
|
76
76
|
batch: IRuntimeAssignmentLogBatch;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
79
|
+
* How a controller answers one batch.
|
|
80
|
+
*
|
|
81
|
+
* - `accepted`: it holds the batch durably;
|
|
82
|
+
* - `replay`: it already holds this batch and does not store it again;
|
|
83
|
+
* - `not-kept`: it keeps no workload logs. It holds nothing, and the node sends no more batches on
|
|
84
|
+
* this session; a later session may be answered differently.
|
|
85
|
+
*
|
|
86
|
+
* A controller answers every batch with one of these; it never leaves the method unhandled, so a
|
|
87
|
+
* node can tell a controller that keeps no logs from a failure worth retrying. It never refuses a
|
|
88
|
+
* batch for a gap in `sequence`: the node discards only what was acknowledged, so a missing batch
|
|
89
|
+
* can only be the controller's own loss, which it records.
|
|
82
90
|
*/
|
|
91
|
+
export type TRuntimeAssignmentLogsStatus = 'accepted' | 'replay' | 'not-kept';
|
|
83
92
|
export interface IReportRuntimeAssignmentLogsResponse {
|
|
84
|
-
status:
|
|
93
|
+
status: TRuntimeAssignmentLogsStatus;
|
|
85
94
|
assignmentId: string;
|
|
86
95
|
captureId: string;
|
|
87
96
|
sequence: number;
|
|
@@ -90,6 +99,8 @@ export declare const runtimeAssignmentLogContract: Readonly<{
|
|
|
90
99
|
readonly error: "Runtime assignment log contract rejected.";
|
|
91
100
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
92
101
|
readonly delivery: "node-pushes-controller-acknowledges-each-batch";
|
|
102
|
+
/** A controller that keeps no logs answers `not-kept`, and the node stops for that session. */
|
|
103
|
+
readonly notKept: "node-stops-for-the-session";
|
|
93
104
|
/** The most entries in one batch. */
|
|
94
105
|
readonly maximumEntriesPerBatch: 1024;
|
|
95
106
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -6,6 +6,8 @@ export const runtimeAssignmentLogContract = Object.freeze({
|
|
|
6
6
|
error: 'Runtime assignment log contract rejected.',
|
|
7
7
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
8
8
|
delivery: 'node-pushes-controller-acknowledges-each-batch',
|
|
9
|
+
/** A controller that keeps no logs answers `not-kept`, and the node stops for that session. */
|
|
10
|
+
notKept: 'node-stops-for-the-session',
|
|
9
11
|
/** The most entries in one batch. */
|
|
10
12
|
maximumEntriesPerBatch: 1024,
|
|
11
13
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -26,7 +28,7 @@ catch {
|
|
|
26
28
|
const encoder = new TextEncoder();
|
|
27
29
|
const streams = ['stdout', 'stderr'];
|
|
28
30
|
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured'];
|
|
29
|
-
const statuses = ['accepted', 'replay'];
|
|
31
|
+
const statuses = ['accepted', 'replay', 'not-kept'];
|
|
30
32
|
const literalOf = (valueArg, allowedArg) => {
|
|
31
33
|
requireNetwork(allowedArg.includes(valueArg));
|
|
32
34
|
return valueArg;
|
|
@@ -136,4 +138,4 @@ export const bindReportRuntimeAssignmentLogsResponse = (valueArg, requestArg) =>
|
|
|
136
138
|
&& response.sequence === batch.sequence);
|
|
137
139
|
return response;
|
|
138
140
|
});
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZWFzc2lnbm1lbnRsb2dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZGF0YS9ydW50aW1lYXNzaWdubWVudGxvZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHOUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FDcEcsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQXlHakUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4RCxLQUFLLEVBQUUsMkNBQTJDO0lBQ2xELGlHQUFpRztJQUNqRyxRQUFRLEVBQUUsZ0RBQWdEO0lBQzFELCtGQUErRjtJQUMvRixPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLHFDQUFxQztJQUNyQyxzQkFBc0IsRUFBRSxJQUFJO0lBQzVCLDhGQUE4RjtJQUM5RixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCOzs7T0FHRztJQUNILDJCQUEyQixFQUFFLFNBQVM7Q0FDOUIsQ0FBQyxDQUFDO0FBRVosTUFBTSxJQUFJLEdBQUcsR0FBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRixNQUFNLElBQUksR0FBRyxDQUFJLFlBQXFCLEVBQUssRUFBRSxHQUFHLElBQUksQ0FBQztJQUFDLE9BQU8sWUFBWSxFQUFFLENBQUM7QUFBQyxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUFDLENBQUMs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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1258,8 +1258,13 @@ acknowledged it, and sends the next one only then.
|
|
|
1258
1258
|
empty. A report is at most 1 024 entries and one mebibyte of canonical JSON, and timestamps are
|
|
1259
1259
|
nanoseconds since the Unix epoch as decimal digits.
|
|
1260
1260
|
|
|
1261
|
-
The answer `{ status, assignmentId, captureId, sequence }`
|
|
1262
|
-
|
|
1261
|
+
The answer `{ status, assignmentId, captureId, sequence }` (`TRuntimeAssignmentLogsStatus`) is
|
|
1262
|
+
`accepted`, `replay` for a batch the controller already holds, or `not-kept` from a controller that
|
|
1263
|
+
keeps no workload logs: it holds nothing, and the node sends no more batches on that session (a
|
|
1264
|
+
later session may be answered differently). A controller answers every batch with one of the
|
|
1265
|
+
three and never leaves the method unhandled, so a node tells a controller that keeps no logs from
|
|
1266
|
+
a failure worth retrying. A controller must therefore handle the method before a node that
|
|
1267
|
+
captures logs runs against it. The controller never refuses a batch for a gap in `sequence`: the
|
|
1263
1268
|
node only discards what was acknowledged, so a gap is the controller's own loss, which it records.
|
|
1264
1269
|
`bindReportRuntimeAssignmentLogsRequest(request, assignment, logPolicy, trustedSession)` checks the
|
|
1265
1270
|
session, that the assignment is this node's and carries the batch's attempt, and every line's
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -90,12 +90,22 @@ export interface IReportRuntimeAssignmentLogsRequest {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
93
|
+
* How a controller answers one batch.
|
|
94
|
+
*
|
|
95
|
+
* - `accepted`: it holds the batch durably;
|
|
96
|
+
* - `replay`: it already holds this batch and does not store it again;
|
|
97
|
+
* - `not-kept`: it keeps no workload logs. It holds nothing, and the node sends no more batches on
|
|
98
|
+
* this session; a later session may be answered differently.
|
|
99
|
+
*
|
|
100
|
+
* A controller answers every batch with one of these; it never leaves the method unhandled, so a
|
|
101
|
+
* node can tell a controller that keeps no logs from a failure worth retrying. It never refuses a
|
|
102
|
+
* batch for a gap in `sequence`: the node discards only what was acknowledged, so a missing batch
|
|
103
|
+
* can only be the controller's own loss, which it records.
|
|
96
104
|
*/
|
|
105
|
+
export type TRuntimeAssignmentLogsStatus = 'accepted' | 'replay' | 'not-kept';
|
|
106
|
+
|
|
97
107
|
export interface IReportRuntimeAssignmentLogsResponse {
|
|
98
|
-
status:
|
|
108
|
+
status: TRuntimeAssignmentLogsStatus;
|
|
99
109
|
assignmentId: string;
|
|
100
110
|
captureId: string;
|
|
101
111
|
sequence: number;
|
|
@@ -105,6 +115,8 @@ export const runtimeAssignmentLogContract = Object.freeze({
|
|
|
105
115
|
error: 'Runtime assignment log contract rejected.',
|
|
106
116
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
107
117
|
delivery: 'node-pushes-controller-acknowledges-each-batch',
|
|
118
|
+
/** A controller that keeps no logs answers `not-kept`, and the node stops for that session. */
|
|
119
|
+
notKept: 'node-stops-for-the-session',
|
|
108
120
|
/** The most entries in one batch. */
|
|
109
121
|
maximumEntriesPerBatch: 1024,
|
|
110
122
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -121,7 +133,7 @@ const safe = <T>(operationArg: () => T): T => { try { return operationArg(); } c
|
|
|
121
133
|
const encoder = new TextEncoder();
|
|
122
134
|
const streams = ['stdout', 'stderr'] as const;
|
|
123
135
|
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured'] as const;
|
|
124
|
-
const statuses = ['accepted', 'replay'] as const;
|
|
136
|
+
const statuses = ['accepted', 'replay', 'not-kept'] as const;
|
|
125
137
|
|
|
126
138
|
const literalOf = <TLiteral extends string>(valueArg: unknown, allowedArg: readonly TLiteral[]): TLiteral => {
|
|
127
139
|
requireNetwork((allowedArg as readonly unknown[]).includes(valueArg));
|