@overkill-dev/resources 0.0.11 → 0.0.12

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.
Files changed (54) hide show
  1. package/attachments/attachment-context.d.ts +5 -1
  2. package/attachments/attachment-context.d.ts.map +1 -1
  3. package/attachments/attachment-context.js +10 -0
  4. package/attachments/attachment-context.js.map +1 -1
  5. package/attachments/failure-artifact-stream.js +147 -0
  6. package/attachments/failure-artifact-stream.js.map +1 -0
  7. package/attachments/resource-failure-context.js +45 -0
  8. package/attachments/resource-failure-context.js.map +1 -0
  9. package/engine/identity.d.ts +5 -0
  10. package/engine/identity.d.ts.map +1 -1
  11. package/engine/identity.js +41 -0
  12. package/engine/identity.js.map +1 -0
  13. package/engine/run-artifact.d.ts +1 -1
  14. package/engine/run-artifact.d.ts.map +1 -1
  15. package/engine/runtime-attachment.d.ts +26 -6
  16. package/engine/runtime-attachment.d.ts.map +1 -1
  17. package/engine/runtime-attachment.js +7 -0
  18. package/engine/runtime-attachment.js.map +1 -0
  19. package/package-version.js +31 -0
  20. package/package-version.js.map +1 -0
  21. package/package.json +9 -3
  22. package/packages/resources/attachment-context.entry-point.d.ts +1 -1
  23. package/packages/resources/attachment-context.entry-point.d.ts.map +1 -1
  24. package/packages/resources/attachment-context.entry-point.js +1 -1
  25. package/packages/resources/attachment-context.entry-point.js.map +1 -1
  26. package/packages/resources/resources.entry-point.d.ts +2 -0
  27. package/packages/resources/resources.entry-point.d.ts.map +1 -1
  28. package/packages/resources/resources.entry-point.js +1 -0
  29. package/packages/resources/resources.entry-point.js.map +1 -1
  30. package/readme.md +28 -1
  31. package/resources/failure-artifacts.d.ts +49 -0
  32. package/resources/failure-artifacts.d.ts.map +1 -0
  33. package/resources/failure-artifacts.js +34 -0
  34. package/resources/failure-artifacts.js.map +1 -0
  35. package/resources/http-request-attribution.js +23 -0
  36. package/resources/http-request-attribution.js.map +1 -0
  37. package/resources/local-http-failure-capture.js +43 -0
  38. package/resources/local-http-failure-capture.js.map +1 -0
  39. package/resources/local-http-service-resource.d.ts.map +1 -1
  40. package/resources/local-http-service-resource.js +18 -7
  41. package/resources/local-http-service-resource.js.map +1 -1
  42. package/resources/local-http-transcript-observer.js +14 -21
  43. package/resources/local-http-transcript-observer.js.map +1 -1
  44. package/resources/local-process-service-resource.d.ts +1 -1
  45. package/resources/local-process-service-resource.d.ts.map +1 -1
  46. package/resources/local-process-service-resource.js +85 -12
  47. package/resources/local-process-service-resource.js.map +1 -1
  48. package/resources/simulated-http-server-resource.d.ts +1 -1
  49. package/resources/simulated-http-server-resource.d.ts.map +1 -1
  50. package/resources/simulated-http-server-resource.js +27 -1
  51. package/resources/simulated-http-server-resource.js.map +1 -1
  52. package/sbom.cdx.json +28 -11
  53. package/stored-value.js +12 -0
  54. package/stored-value.js.map +1 -0
@@ -1,8 +1,12 @@
1
- import type { AttachmentProducer, RuntimeAttachments } from '../engine/runtime-attachment.ts';
1
+ import type { AttachmentProducer, AttachmentLimits, FailureArtifactCondition, RuntimeAttachments } from '../engine/runtime-attachment.ts';
2
2
  export type AttachmentContext = {
3
+ readonly limits: AttachmentLimits;
4
+ readonly prepareForProducer: (producer: AttachmentProducer, condition: FailureArtifactCondition, source: 'boundary-captured' | 'instrumented' | 'native', subtype: 'attachment' | 'witness') => RuntimeAttachments;
3
5
  readonly forProducer: (producer: AttachmentProducer) => RuntimeAttachments;
4
6
  };
5
7
  export declare function attachmentsForProducer(producer: AttachmentProducer): RuntimeAttachments;
6
8
  export declare function resourceAttachments(name: string): RuntimeAttachments;
7
9
  export declare function runWithAttachmentContext<Value>(context: AttachmentContext, run: () => Promise<Value>): Promise<Value>;
10
+ export declare function preparedResourceAttachments(name: string, condition: FailureArtifactCondition, source: 'boundary-captured' | 'instrumented' | 'native', subtype: 'attachment' | 'witness'): RuntimeAttachments | null;
11
+ export declare function currentAttachmentLimits(): AttachmentLimits | null;
8
12
  //# sourceMappingURL=attachment-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.d.ts","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE9F,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;CAC9E,CAAC;AA2BF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEpE;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAChD,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,KAAK,CAAC,CAEhB"}
1
+ {"version":3,"file":"attachment-context.d.ts","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,QAAQ,EACvD,OAAO,EAAE,YAAY,GAAG,SAAS,KAChC,kBAAkB,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;CAC9E,CAAC;AA2BF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEpE;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAChD,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,KAAK,CAAC,CAEhB;AAED,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,QAAQ,EACvD,OAAO,EAAE,YAAY,GAAG,SAAS,GAClC,kBAAkB,GAAG,IAAI,CAG3B;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,GAAG,IAAI,CAEjE"}
@@ -28,4 +28,14 @@ export function resourceAttachments(name) {
28
28
  export async function runWithAttachmentContext(context, run) {
29
29
  return await attachmentContext.run(context, run);
30
30
  }
31
+ export function preparedResourceAttachments(name, condition, source, subtype) {
32
+ return attachmentContext.getStore()?.prepareForProducer({ kind: 'resource', name }, condition, source, subtype) ??
33
+ null;
34
+ }
35
+ export function currentAttachmentLimits() {
36
+ return attachmentContext.getStore()?.limits ?? null;
37
+ }
38
+ export function currentAttachmentContext() {
39
+ return attachmentContext.getStore() ?? null;
40
+ }
31
41
  //# sourceMappingURL=attachment-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.js","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAEvF,SAAS,0BAA0B,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC9C,CAAC;AACD,SAAS,uBAAuB;IAC5B,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxE,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAqB,CAAC;IAC3D,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,iBAAiB,GAAG,uBAAuB,EAAE,CAAC;AAEpD,SAAS,sBAAsB;IAC3B,MAAM,WAAW,GAAG,KAAK,UAAU,yBAAyB;QACxD,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IAC/D,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAA0B,EAC1B,GAAyB;IAEzB,OAAO,MAAM,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"attachment-context.js","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAoBrD,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAEvF,SAAS,0BAA0B,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC9C,CAAC;AACD,SAAS,uBAAuB;IAC5B,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxE,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAqB,CAAC;IAC3D,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,iBAAiB,GAAG,uBAAuB,EAAE,CAAC;AAEpD,SAAS,sBAAsB;IAC3B,MAAM,WAAW,GAAG,KAAK,UAAU,yBAAyB;QACxD,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IAC/D,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAA0B,EAC1B,GAAyB;IAEzB,OAAO,MAAM,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,IAAY,EACZ,SAAmC,EACnC,MAAuD,EACvD,OAAiC;IAEjC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QAC3G,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB;IACnC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AAChD,CAAC"}
@@ -0,0 +1,147 @@
1
+ import { createStoredValue } from "../stored-value.js";
2
+ import { defaultAttachmentLimits } from "../engine/runtime-attachment.js";
3
+ import { workIdentityKey } from "../engine/identity.js";
4
+ import { currentAttachmentContext } from "./attachment-context.js";
5
+ import { resourceFailureAttachments } from "./resource-failure-context.js";
6
+ const registryKey = Symbol.for('@overkill-dev/failure-artifact-streams/v2');
7
+ function isFailureRunRegistry(value) {
8
+ return value instanceof WeakMap;
9
+ }
10
+ function sharedFailureRuns() {
11
+ const existing = Reflect.get(globalThis, registryKey);
12
+ if (isFailureRunRegistry(existing)) {
13
+ return existing;
14
+ }
15
+ const created = new WeakMap();
16
+ Object.defineProperty(globalThis, registryKey, { value: created });
17
+ return created;
18
+ }
19
+ const runs = sharedFailureRuns();
20
+ function currentFailureStreams() {
21
+ const context = currentAttachmentContext();
22
+ if (context === null) {
23
+ return null;
24
+ }
25
+ const streams = runs.get(context) ?? new Map();
26
+ runs.set(context, streams);
27
+ return streams;
28
+ }
29
+ function attemptKey(work, attempt) {
30
+ return `${workIdentityKey(work)}:${attempt.index}`;
31
+ }
32
+
33
+ async function drainCapture(state) {
34
+ const writer = state.writer.read() ?? await state.attachments.open(state.metadata);
35
+ state.writer.write(writer);
36
+ while (state.chunks.read().length > 0) {
37
+ const batch = state.chunks.read();
38
+ state.chunks.write([]);
39
+ for (const chunk of batch) {
40
+ await writer.write(chunk);
41
+ state.queuedBytes.write(state.queuedBytes.read() - Buffer.byteLength(chunk));
42
+ }
43
+ }
44
+ }
45
+ async function capturePending(state) {
46
+ try {
47
+ await drainCapture(state);
48
+ }
49
+ catch (error) {
50
+ state.failure.write(error instanceof Error
51
+ ? error
52
+ : new Error('Failure artifact stream could not capture output.', { cause: error }));
53
+ state.chunks.write([]);
54
+ state.queuedBytes.write(0);
55
+ }
56
+ finally {
57
+ state.pending.write(null);
58
+ }
59
+ }
60
+ async function observeLateCapture(state, chunk) {
61
+ const writer = state.writer.read();
62
+ const writing = writer === null ? state.attachments.json(state.metadata, null) : writer.write(chunk);
63
+ try {
64
+ await writing;
65
+ }
66
+ catch (error) {
67
+ state.failure.write(error instanceof Error ? error : new Error('Late failure capture failed.', { cause: error }));
68
+ }
69
+ }
70
+ function captureAcceptsWrite(state, chunk) {
71
+ if (state.closed.read() && !state.lateReported.read()) {
72
+ state.lateReported.write(true);
73
+ state.pending.write(observeLateCapture(state, chunk));
74
+ }
75
+ return !state.closed.read() && !state.truncated.read() && state.failure.read() === null;
76
+ }
77
+ function queueCapture(state, chunk) {
78
+ const available = defaultAttachmentLimits.maxInlineBytes - state.queuedBytes.read();
79
+ const limited = Buffer.byteLength(chunk) > available;
80
+ const decoder = new TextDecoder();
81
+ const prefix = limited
82
+ ? decoder.decode(Buffer.from(chunk).subarray(0, available), { stream: true })
83
+ : chunk;
84
+ state.truncated.write(limited);
85
+ state.chunks.write([...state.chunks.read(), prefix]);
86
+ state.queuedBytes.write(state.queuedBytes.read() + Buffer.byteLength(prefix));
87
+ }
88
+ function writeCapture(state, chunk) {
89
+ if (!captureAcceptsWrite(state, chunk)) {
90
+ return;
91
+ }
92
+ queueCapture(state, chunk);
93
+ if (state.pending.read() === null) {
94
+ state.pending.write(capturePending(state));
95
+ }
96
+ }
97
+ async function closeCapture(state) {
98
+ if (state.closed.read()) {
99
+ return;
100
+ }
101
+ state.closed.write(true);
102
+ await state.pending.read();
103
+ const writer = state.writer.read();
104
+ if (writer !== null) {
105
+ await (state.truncated.read() ? writer.close('capture-limit') : writer.close());
106
+ }
107
+ const failure = state.failure.read();
108
+ if (failure !== null) {
109
+ throw failure;
110
+ }
111
+ }
112
+ function createCaptureState(attachments, name, mediaType) {
113
+ return {
114
+ attachments,
115
+ metadata: { kind: 'text', name, mediaType },
116
+ chunks: createStoredValue([]),
117
+ queuedBytes: createStoredValue(0),
118
+ truncated: createStoredValue(false),
119
+ failure: createStoredValue(null),
120
+ closed: createStoredValue(false),
121
+ lateReported: createStoredValue(false),
122
+ writer: createStoredValue(null),
123
+ pending: createStoredValue(null)
124
+ };
125
+ }
126
+ function registerAttemptStream(context, stream) {
127
+ const streams = currentFailureStreams();
128
+ if (context.condition.kind === 'attempt' && streams !== null) {
129
+ const key = attemptKey(context.condition.work, context.condition.attempt);
130
+ const owned = streams.get(key) ?? new Set();
131
+ streams.set(key, new Set([...owned, stream]));
132
+ }
133
+ }
134
+ export function createFailureArtifactStream(context, source, name, mediaType) {
135
+ const attachments = resourceFailureAttachments(context, source);
136
+ if (attachments === null) {
137
+ return null;
138
+ }
139
+ const state = createCaptureState(attachments, name, mediaType);
140
+ const stream = {
141
+ write: writeCapture.bind(null, state),
142
+ close: closeCapture.bind(null, state)
143
+ };
144
+ registerAttemptStream(context, stream);
145
+ return stream;
146
+ }
147
+ //# sourceMappingURL=failure-artifact-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-artifact-stream.js","sourceRoot":"","sources":["../../../../source/attachments/failure-artifact-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { preparedResourceAttachments } from "./attachment-context.js";
3
+ const contextKey = Symbol.for('@overkill-dev/resource-failure-context/v1');
4
+ function isResourceFailureStorage(value) {
5
+ return value instanceof AsyncLocalStorage;
6
+ }
7
+ function sharedResourceFailureContext() {
8
+ const existing = Reflect.get(globalThis, contextKey);
9
+ if (isResourceFailureStorage(existing)) {
10
+ return existing;
11
+ }
12
+ const created = new AsyncLocalStorage();
13
+ Object.defineProperty(globalThis, contextKey, { value: created });
14
+ return created;
15
+ }
16
+ const resourceFailureContext = sharedResourceFailureContext();
17
+ export function currentResourceFailureContext() {
18
+ return resourceFailureContext.getStore() ?? null;
19
+ }
20
+ export function resourceFailureAttachments(context, source) {
21
+ return preparedResourceAttachments(context.name, context.condition, source, 'attachment');
22
+ }
23
+ export function attemptFailureContext(name, work, attempt) {
24
+ return { name, condition: { kind: 'attempt', work, attempt } };
25
+ }
26
+
27
+ const scopeRegistryKey = Symbol.for('@overkill-dev/transcript-attempt-scopes/v1');
28
+ function isAttemptScopeRegistry(value) {
29
+ return value instanceof WeakMap;
30
+ }
31
+ function sharedAttemptScopes() {
32
+ const existing = Reflect.get(globalThis, scopeRegistryKey);
33
+ if (isAttemptScopeRegistry(existing)) {
34
+ return existing;
35
+ }
36
+ const created = new WeakMap();
37
+ Object.defineProperty(globalThis, scopeRegistryKey, { value: created });
38
+ return created;
39
+ }
40
+ const attemptScopes = sharedAttemptScopes();
41
+
42
+ export function transcriptAttempt(scope) {
43
+ return scope === null ? null : attemptScopes.get(scope) ?? null;
44
+ }
45
+ //# sourceMappingURL=resource-failure-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-failure-context.js","sourceRoot":"","sources":["../../../../source/attachments/resource-failure-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,6BAAkD,MAAM,yBAAyB,CAAC;AAM3F,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAE3E,SAAS,wBAAwB,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC9C,CAAC;AACD,SAAS,4BAA4B;IACjC,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAA0B,CAAC;IAChE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC;AAE9D,MAAM,UAAU,6BAA6B;IACzC,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,OAA+B,EAC/B,MAA4C;IAE5C,OAAO,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAY,EAAE,OAAkB;IAChF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;AACnE,CAAC;;MAWK,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAClF,SAAS,sBAAsB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,OAAO,CAAC;AACpC,CAAC;AACD,SAAS,mBAAmB;IACxB,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACpE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAyB,IAAI,OAAO,EAAE,CAAC;IACpD,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;;MAQtC,UAAU,iBAAiB,CAC7B,KAA0B;IAE1B,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpE,CAAC"}
@@ -18,6 +18,11 @@ export type WorkloadId = {
18
18
  readonly name: string;
19
19
  readonly params: Readonly<Record<string, string>>;
20
20
  };
21
+ export type WorkId = {
22
+ readonly case: CaseId;
23
+ readonly runtimes: readonly RuntimeId[];
24
+ readonly workload: WorkloadId | null;
25
+ };
21
26
  export type AttemptId = {
22
27
  readonly index: number;
23
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MA4FM,SAAS,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,SAII,GAkFQ,SAAS,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,41 @@
1
+ export function caseIdentityKey(caseId) {
2
+ return JSON.stringify([caseId.file, caseId.suite, caseId.title, caseId.params]);
3
+ }
4
+ function orderedRecordEntries(record) {
5
+ return Object.entries(record).toSorted(function compareKeys([left], [right]) {
6
+ return left.localeCompare(right);
7
+ });
8
+ }
9
+ function runtimeIdentityShape(runtime) {
10
+ return [
11
+ runtime.name,
12
+ runtime.variantId,
13
+ orderedRecordEntries(runtime.dimensions),
14
+ orderedRecordEntries(runtime.scenarios)
15
+ ];
16
+ }
17
+ function runtimeIdentitiesShape(runtimes) {
18
+ return runtimes.map(runtimeIdentityShape);
19
+ }
20
+ function workloadIdentityShape(workload) {
21
+ if (workload === null) {
22
+ return null;
23
+ }
24
+ return [
25
+ workload.name,
26
+ orderedRecordEntries(workload.params)
27
+ ];
28
+ }
29
+
30
+ export function workIdentityKey(work) {
31
+ if (work.runtimes.length === 0 && work.workload === null) {
32
+ return caseIdentityKey(work.case);
33
+ }
34
+ return JSON.stringify([
35
+ caseIdentityKey(work.case),
36
+ runtimeIdentitiesShape(work.runtimes),
37
+ workloadIdentityShape(work.workload)
38
+ ]);
39
+ }
40
+
41
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,eAce,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAwC;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,WAAW,CAAC,CAAE,IAAI,CAAE,EAAE,CAAE,KAAK,CAAE;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAkB;IAC5C,OAAO;QACH,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,SAAS;QACjB,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC;KAC1C,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA8B;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA2B;IACtD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,QAAQ,CAAC,IAAI;QACb,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;KACxC,CAAC;AACN,CAAC;;MAMK,UAIU,eAAe,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC;QAClB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;AACP,CAAC"}
@@ -10,7 +10,7 @@ export type RunArtifactScope = {
10
10
  type RunArtifactBaseId = {
11
11
  readonly runtimes: readonly RuntimeId[];
12
12
  readonly sequence: number;
13
- readonly subtype: 'attachment' | 'coverage' | 'hedged-conflict' | 'log-capture';
13
+ readonly subtype: 'attachment' | 'coverage' | 'hedged-conflict' | 'log-capture' | 'witness';
14
14
  readonly workload: WorkloadId | null;
15
15
  };
16
16
  type CaseArtifactId = RunArtifactBaseId & {
@@ -1 +1 @@
1
- {"version":3,"file":"run-artifact.d.ts","sourceRoot":"","sources":["../../../../source/engine/run-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,mBAAmB,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAAC;IAChF,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,KAAK,cAAc,GAAG,iBAAiB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC;CACzE,CAAC;AAEF,KAAK,mBAAmB,GAAG,iBAAiB,GAAG;IAC3C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;KAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAsC,EAO3C,CAAC"}
1
+ {"version":3,"file":"run-artifact.d.ts","sourceRoot":"","sources":["../../../../source/engine/run-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,mBAAmB,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAAC;IAC5F,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,KAAK,cAAc,GAAG,iBAAiB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC;CACzE,CAAC;AAEF,KAAK,mBAAmB,GAAG,iBAAiB,GAAG;IAC3C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;KAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAsC,EAO3C,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { JsonValue, ReadonlyDeep } from 'type-fest';
2
+ import type { AttemptId, WorkId } from './identity.ts';
2
3
  import type { RunArtifactId } from './run-artifact.ts';
3
4
  export type AttachmentMetadata = {
4
5
  readonly name: string;
@@ -8,7 +9,7 @@ export type AttachmentCompletion = {
8
9
  readonly kind: 'complete';
9
10
  } | {
10
11
  readonly kind: 'incomplete';
11
- readonly reason: 'byte-limit' | 'interrupted' | 'unclosed' | 'write-error';
12
+ readonly reason: 'byte-limit' | 'capture-limit' | 'interrupted' | 'unclosed' | 'write-error';
12
13
  } | {
13
14
  readonly kind: 'truncated';
14
15
  readonly reason: 'byte-limit';
@@ -40,22 +41,40 @@ export type AttachmentProducer = {
40
41
  readonly kind: 'resource';
41
42
  readonly name: string;
42
43
  };
44
+ export type FailureArtifactCondition = {
45
+ readonly kind: 'attempt';
46
+ readonly work: WorkId;
47
+ readonly attempt: AttemptId;
48
+ } | {
49
+ readonly kind: 'resource';
50
+ readonly resource: string;
51
+ readonly boundary: string;
52
+ };
53
+ type ExplicitAttachmentCapture = {
54
+ readonly capture: 'opt-in';
55
+ };
56
+ type AutomaticAttachmentCapture = {
57
+ readonly capture: 'automatic';
58
+ readonly retention: {
59
+ readonly condition: FailureArtifactCondition;
60
+ readonly state: 'prepared' | 'retained';
61
+ };
62
+ };
43
63
  export type RuntimeAttachmentArtifact = {
44
64
  readonly id: RunArtifactId & {
45
- readonly subtype: 'attachment';
65
+ readonly subtype: 'attachment' | 'witness';
46
66
  };
47
- readonly source: 'instrumented';
67
+ readonly source: 'boundary-captured' | 'instrumented' | 'native';
48
68
  readonly payload: AttachmentMetadata & {
49
69
  readonly kind: 'runtime-attachment';
50
- readonly capture: 'opt-in';
51
70
  readonly capturedAtMicroseconds: number;
52
71
  readonly producer: AttachmentProducer;
53
72
  readonly content: AttachmentContent;
54
- };
73
+ } & (AutomaticAttachmentCapture | ExplicitAttachmentCapture);
55
74
  };
56
75
  export type AttachmentWriter<Chunk> = {
57
76
  readonly write: (chunk: Chunk) => Promise<void>;
58
- readonly close: () => Promise<RuntimeAttachmentArtifact>;
77
+ readonly close: (...reason: readonly ['capture-limit'] | readonly []) => Promise<RuntimeAttachmentArtifact>;
59
78
  };
60
79
  export type RuntimeAttachments = {
61
80
  readonly open: {
@@ -75,4 +94,5 @@ export type AttachmentLimits = {
75
94
  readonly maxScopeBytes: number;
76
95
  readonly maxScopeAttachments: number;
77
96
  };
97
+ export {};
78
98
  //# sourceMappingURL=runtime-attachment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-attachment.d.ts","sourceRoot":"","sources":["../../../../source/engine/runtime-attachment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-attachment.d.ts","sourceRoot":"","sources":["../../../../source/engine/runtime-attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAAE,GAAG;IAChE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC;CAChG,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAAE,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,oBAAoB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;KAAE,CAAC,CAAC;CACvF,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CAAE,GAAG;IAC1D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC/B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;CAAE,CAAC;AACjE,KAAK,0BAA0B,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;QAC7C,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;KAC3C,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,QAAQ,CAAC,EAAE,EAAE,aAAa,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;KAAE,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,QAAQ,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG;QACnC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;QACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QACtC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;KACvC,GAAG,CAAC,0BAA0B,GAAG,yBAAyB,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,SAAS,EAAE,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC/G,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE;QACX,CAAC,QAAQ,EAAE,kBAAkB,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAC5G,CAAC,QAAQ,EAAE,kBAAkB,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;SAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;KACxG,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpG,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACrG,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF"}
@@ -0,0 +1,7 @@
1
+ export const defaultAttachmentLimits = Object.freeze({
2
+ maxInlineBytes: 1_048_576,
3
+ maxArtifactBytes: 10_485_760,
4
+ maxScopeBytes: 10_485_760,
5
+ maxScopeAttachments: 100
6
+ });
7
+ //# sourceMappingURL=runtime-attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-attachment.js","sourceRoot":"","sources":["../../../../source/engine/runtime-attachment.ts"],"names":[],"mappings":"AA0FA,MAAM,CAAC,MAAM,uBAAuB,GAAqB,MAAM,CAAC,MAAM,CAAC;IACnE,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,UAAU;IAC5B,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,GAAG;CAC3B,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { z } from 'zod';
5
+ const packageVersionSchema = z.object({ name: z.string(), version: z.string() });
6
+ async function parsePackageVersion(manifestPath) {
7
+ const contents = await readFile(manifestPath, 'utf8');
8
+ const parsed = packageVersionSchema.safeParse(JSON.parse(contents));
9
+ return parsed.success ? parsed.data : null;
10
+ }
11
+ async function readPackageVersion(directory) {
12
+ const manifestPath = path.join(directory, 'package.json');
13
+ try {
14
+ return await parsePackageVersion(manifestPath);
15
+ }
16
+ catch (error) {
17
+ if (error instanceof Error && Reflect.get(error, 'code') === 'ENOENT' && path.dirname(directory) !== directory) {
18
+ return await readPackageVersion(path.dirname(directory));
19
+ }
20
+ return null;
21
+ }
22
+ }
23
+ export async function packageVersion(moduleUrl) {
24
+ try {
25
+ return await readPackageVersion(path.dirname(fileURLToPath(moduleUrl)));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../../source/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGjF,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACnD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC;QACD,OAAO,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,IACI,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAC5G,CAAC;YACC,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAClD,IAAI,CAAC;QACD,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,8 @@
4
4
  "url": "https://github.com/enormora/overkill/issues"
5
5
  },
6
6
  "dependencies": {
7
- "type-fest": "5.10.0"
7
+ "type-fest": "5.10.0",
8
+ "zod": "4.6.5"
8
9
  },
9
10
  "description": "Typed Overkill resource and runtime descriptors.",
10
11
  "engines": {
@@ -29,7 +30,7 @@
29
30
  "license": "MIT",
30
31
  "name": "@overkill-dev/resources",
31
32
  "peerDependencies": {
32
- "@overkill-dev/simulation": "0.0.4"
33
+ "@overkill-dev/simulation": "0.0.5"
33
34
  },
34
35
  "repository": {
35
36
  "type": "git",
@@ -37,7 +38,12 @@
37
38
  },
38
39
  "sideEffects": [
39
40
  "./attachments/attachment-context.js",
41
+ "./attachments/failure-artifact-stream.js",
42
+ "./attachments/resource-failure-context.js",
43
+ "./engine/runtime-attachment.js",
44
+ "./package-version.js",
40
45
  "./packages/resources/resources.entry-point.js",
46
+ "./resources/failure-artifacts.js",
41
47
  "./resources/local-http-transcript-observer.js",
42
48
  "./resources/local-service-resource.js",
43
49
  "./resources/resource-definition-brand.js",
@@ -49,5 +55,5 @@
49
55
  "./resources/runtime-matrix-definition.js"
50
56
  ],
51
57
  "type": "module",
52
- "version": "0.0.11"
58
+ "version": "0.0.12"
53
59
  }
@@ -1,3 +1,3 @@
1
- export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
2
2
  export type { AttachmentContext } from '../../attachments/attachment-context.ts';
3
3
  //# sourceMappingURL=attachment-context.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -1,2 +1,2 @@
1
- export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
2
2
  //# sourceMappingURL=attachment-context.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
@@ -27,4 +27,6 @@ export type { RuntimeDefinition as Runtime, RuntimeResourceMap as ResourceMap }
27
27
  export type { ResourceLifecycleFailure, ResourceLifecyclePhase } from '../../resources/resource-lifecycle-error.ts';
28
28
  export type { ResourceSession, ResourceSessionDisposalContext, StartResourcesRequest } from '../../resources/resource-session.ts';
29
29
  export type { RuntimeSession, RuntimeSessionDisposalContext, StartRuntimeRequest } from '../../resources/runtime-lifecycle.ts';
30
+ export { withFailureArtifacts } from '../../resources/failure-artifacts.ts';
31
+ export type { FailureArtifactAttachments, ResourceFailureCapture, SimulationWitnessArtifact, SimulationWitnessInput } from '../../resources/failure-artifacts.ts';
30
32
  //# sourceMappingURL=resources.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,5 @@ export { assertPerCaseResourceGraph, assertResourceDependencyScopes } from "../.
26
26
  export { startResources } from "../../resources/resource-session.js";
27
27
  export { ResourceLifecycleError } from "../../resources/resource-lifecycle-error.js";
28
28
  export { startRuntime } from "../../resources/runtime-lifecycle.js";
29
+ export { withFailureArtifacts } from "../../resources/failure-artifacts.js";
29
30
  //# sourceMappingURL=resources.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC;AA4G9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC"}
package/readme.md CHANGED
@@ -191,7 +191,34 @@ Attachments require runner-managed integration execution. Standalone
191
191
 
192
192
  `@overkill-dev/resources/attachment-context` exposes the shared context bridge
193
193
  for runner and authoring integrations. Test authors should use `scope.attachments`.
194
- Service transcripts and logs are retained only when explicitly attached.
194
+ Runner-managed integration failures automatically retain first-party HTTP
195
+ transcripts, process stdout/stderr, and simulated HTTP scenario witnesses.
196
+ Passing attempts discard this prepared evidence; explicit attachments retain
197
+ their existing behavior.
198
+
199
+ `withFailureArtifacts(resource, prepare)` adds custom evidence preparation.
200
+ The callback receives the owner handle, including for projected resources.
201
+ An `attempt` capture includes the exact work identity, retry attempt, and an
202
+ attachment sink with `witness(...)`. Shared-resource `lifetime` captures use a
203
+ run-scoped attachment sink. Preparation runs before scope cleanup and resource
204
+ disposal, including for passing bodies that may fail during cleanup.
205
+ Lifetime collectors read the complete resource transcript; attempt collectors
206
+ read the current attempt's entries.
207
+
208
+ ```ts
209
+ const diagnosticService = withFailureArtifacts(service, async (capture) => {
210
+ await capture.attachments.file(
211
+ { name: 'service-log', mediaType: 'text/plain' },
212
+ capture.handle.logPath
213
+ );
214
+ });
215
+ ```
216
+
217
+ First-party output checkpoints received prefixes during execution. Custom
218
+ collectors run before teardown and cannot recover data after their owner
219
+ crashes. Shared logs keep run attribution; precisely scoped interactions keep
220
+ case and attempt attribution. Collector failures are artifact errors and do
221
+ not prevent resource disposal.
195
222
 
196
223
  Resources may declare finite scenario slots with a default, timing, and allowed
197
224
  values. `defineRuntime(...)` lifts slots from its complete dependency graph.