camstack 1.2.122 → 1.2.124
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.
|
@@ -26233,7 +26233,19 @@ var TrackPositionSchema = external_exports.object({
|
|
|
26233
26233
|
x: external_exports.number(),
|
|
26234
26234
|
y: external_exports.number(),
|
|
26235
26235
|
timestamp: external_exports.number(),
|
|
26236
|
-
bbox: BoundingBoxSchema
|
|
26236
|
+
bbox: BoundingBoxSchema,
|
|
26237
|
+
/**
|
|
26238
|
+
* Which detector pass measured this box (D399): `frame` is the full-frame
|
|
26239
|
+
* pass on the analysis raster, `recovery` is the native-resolution
|
|
26240
|
+
* small-subject second pass (D377/D378). Both write into one array, and until
|
|
26241
|
+
* this field existed the only way to tell them apart was that full-frame boxes
|
|
26242
|
+
* are exact multiples of 1.2 while recovery boxes are full-precision floats.
|
|
26243
|
+
* Absent on rows written before D399.
|
|
26244
|
+
*/
|
|
26245
|
+
source: external_exports.enum(["frame", "recovery"]).optional(),
|
|
26246
|
+
/** Detection score of this box, so a position can be weighed and not only
|
|
26247
|
+
* plotted. Absent on rows written before D399. */
|
|
26248
|
+
score: external_exports.number().optional()
|
|
26237
26249
|
});
|
|
26238
26250
|
var TrackSnapshotSchema = external_exports.object({
|
|
26239
26251
|
timestamp: external_exports.number(),
|
|
@@ -26492,14 +26504,25 @@ var TrackSchema = external_exports.object({
|
|
|
26492
26504
|
*/
|
|
26493
26505
|
hasRider: external_exports.boolean().optional(),
|
|
26494
26506
|
/**
|
|
26495
|
-
* WHY this track ended without a NATIVE best-shot
|
|
26496
|
-
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)
|
|
26507
|
+
* WHY this track ended without a NATIVE best-shot FRAME
|
|
26508
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md),
|
|
26509
|
+
* widened by [D400](../decisions/adr-0400-the-picture-is-judged-on-what-is-delivered.md)) —
|
|
26497
26510
|
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
26498
|
-
* `derive-returned-null tile=standin`,
|
|
26499
|
-
*
|
|
26500
|
-
*
|
|
26511
|
+
* `derive-returned-null tile=standin`,
|
|
26512
|
+
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
26513
|
+
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
26514
|
+
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
26501
26515
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
26502
26516
|
*
|
|
26517
|
+
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
26518
|
+
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
26519
|
+
* while its key frame missed carried no reason at all — three of the four
|
|
26520
|
+
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
26521
|
+
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
26522
|
+
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
26523
|
+
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
26524
|
+
* tile ended up being.
|
|
26525
|
+
*
|
|
26503
26526
|
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
26504
26527
|
* that predates the field, and every track whose tile landed native all
|
|
26505
26528
|
* omit it. Render nothing when absent.
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDiscover
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2S3TRFS3.js";
|
|
5
5
|
import "./chunk-LMMQX4CK.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
@@ -38,7 +38,7 @@ async function runServe(args) {
|
|
|
38
38
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
39
39
|
};
|
|
40
40
|
Object.assign(process.env, buildServeEnv(opts));
|
|
41
|
-
await import("./launcher-
|
|
41
|
+
await import("./launcher-VFR24CPY.js");
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// src/commands/agent.ts
|
|
@@ -83,7 +83,7 @@ async function runAgent(args) {
|
|
|
83
83
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
84
84
|
};
|
|
85
85
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
86
|
-
await import("./launcher-
|
|
86
|
+
await import("./launcher-VFR24CPY.js");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// src/commands/setup.ts
|
|
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
|
|
|
1130
1130
|
return true;
|
|
1131
1131
|
}
|
|
1132
1132
|
async function resolveServerInteractive(presetNamespace) {
|
|
1133
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1133
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-4ZPVKRSY.js");
|
|
1134
1134
|
if (presetNamespace) {
|
|
1135
1135
|
const spinner4 = clack.spinner();
|
|
1136
1136
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|
|
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
|
|
|
23633
23633
|
}
|
|
23634
23634
|
});
|
|
23635
23635
|
|
|
23636
|
-
// ../system/dist/dist-
|
|
23637
|
-
var
|
|
23638
|
-
"../system/dist/dist-
|
|
23636
|
+
// ../system/dist/dist-CEUwB91M.js
|
|
23637
|
+
var require_dist_CEUwB91M = __commonJS({
|
|
23638
|
+
"../system/dist/dist-CEUwB91M.js"(exports) {
|
|
23639
23639
|
"use strict";
|
|
23640
23640
|
var zod = require_zod();
|
|
23641
23641
|
var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
|
|
@@ -37003,7 +37003,19 @@ var require_dist_kUlalZ6 = __commonJS({
|
|
|
37003
37003
|
x: zod.z.number(),
|
|
37004
37004
|
y: zod.z.number(),
|
|
37005
37005
|
timestamp: zod.z.number(),
|
|
37006
|
-
bbox: BoundingBoxSchema
|
|
37006
|
+
bbox: BoundingBoxSchema,
|
|
37007
|
+
/**
|
|
37008
|
+
* Which detector pass measured this box (D399): `frame` is the full-frame
|
|
37009
|
+
* pass on the analysis raster, `recovery` is the native-resolution
|
|
37010
|
+
* small-subject second pass (D377/D378). Both write into one array, and until
|
|
37011
|
+
* this field existed the only way to tell them apart was that full-frame boxes
|
|
37012
|
+
* are exact multiples of 1.2 while recovery boxes are full-precision floats.
|
|
37013
|
+
* Absent on rows written before D399.
|
|
37014
|
+
*/
|
|
37015
|
+
source: zod.z.enum(["frame", "recovery"]).optional(),
|
|
37016
|
+
/** Detection score of this box, so a position can be weighed and not only
|
|
37017
|
+
* plotted. Absent on rows written before D399. */
|
|
37018
|
+
score: zod.z.number().optional()
|
|
37007
37019
|
});
|
|
37008
37020
|
var TrackSnapshotSchema = zod.z.object({
|
|
37009
37021
|
timestamp: zod.z.number(),
|
|
@@ -37262,14 +37274,25 @@ var require_dist_kUlalZ6 = __commonJS({
|
|
|
37262
37274
|
*/
|
|
37263
37275
|
hasRider: zod.z.boolean().optional(),
|
|
37264
37276
|
/**
|
|
37265
|
-
* WHY this track ended without a NATIVE best-shot
|
|
37266
|
-
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)
|
|
37277
|
+
* WHY this track ended without a NATIVE best-shot FRAME
|
|
37278
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md),
|
|
37279
|
+
* widened by [D400](../decisions/adr-0400-the-picture-is-judged-on-what-is-delivered.md)) —
|
|
37267
37280
|
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
37268
|
-
* `derive-returned-null tile=standin`,
|
|
37269
|
-
*
|
|
37270
|
-
*
|
|
37281
|
+
* `derive-returned-null tile=standin`,
|
|
37282
|
+
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
37283
|
+
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
37284
|
+
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
37271
37285
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
37272
37286
|
*
|
|
37287
|
+
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
37288
|
+
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
37289
|
+
* while its key frame missed carried no reason at all — three of the four
|
|
37290
|
+
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
37291
|
+
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
37292
|
+
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
37293
|
+
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
37294
|
+
* tile ended up being.
|
|
37295
|
+
*
|
|
37273
37296
|
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
37274
37297
|
* that predates the field, and every track whose tile landed native all
|
|
37275
37298
|
* omit it. Render nothing when absent.
|
|
@@ -60958,7 +60981,7 @@ var require_alerts_addon = __commonJS({
|
|
|
60958
60981
|
[Symbol.toStringTag]: { value: "Module" }
|
|
60959
60982
|
});
|
|
60960
60983
|
require_chunk_Cek0wNdY();
|
|
60961
|
-
var require_dist10 =
|
|
60984
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
60962
60985
|
function selectExpired(alerts, cutoffMs) {
|
|
60963
60986
|
return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
|
|
60964
60987
|
}
|
|
@@ -61777,7 +61800,7 @@ var require_console_logging = __commonJS({
|
|
|
61777
61800
|
[Symbol.toStringTag]: { value: "Module" }
|
|
61778
61801
|
});
|
|
61779
61802
|
require_chunk_Cek0wNdY();
|
|
61780
|
-
var require_dist10 =
|
|
61803
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
61781
61804
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
61782
61805
|
var LEVEL_RANK = {
|
|
61783
61806
|
debug: 0,
|
|
@@ -61871,7 +61894,7 @@ var require_core_blocks_addon = __commonJS({
|
|
|
61871
61894
|
"use strict";
|
|
61872
61895
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
61873
61896
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
61874
|
-
var require_dist10 =
|
|
61897
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
61875
61898
|
var node_crypto = __require("crypto");
|
|
61876
61899
|
var node_fs_promises = __require("fs/promises");
|
|
61877
61900
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -62768,11 +62791,11 @@ var require_core_blocks = __commonJS({
|
|
|
62768
62791
|
}
|
|
62769
62792
|
});
|
|
62770
62793
|
|
|
62771
|
-
// ../system/dist/retired-settings-keys-
|
|
62772
|
-
var
|
|
62773
|
-
"../system/dist/retired-settings-keys-
|
|
62794
|
+
// ../system/dist/retired-settings-keys-DtPZcaQ_.js
|
|
62795
|
+
var require_retired_settings_keys_DtPZcaQ = __commonJS({
|
|
62796
|
+
"../system/dist/retired-settings-keys-DtPZcaQ_.js"(exports) {
|
|
62774
62797
|
"use strict";
|
|
62775
|
-
var require_dist10 =
|
|
62798
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
62776
62799
|
function settingsStoreIsAuthoritativeHere(env) {
|
|
62777
62800
|
const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
|
|
62778
62801
|
return raw === "" || raw === "hub";
|
|
@@ -65007,8 +65030,8 @@ var require_device_manager_addon = __commonJS({
|
|
|
65007
65030
|
[Symbol.toStringTag]: { value: "Module" }
|
|
65008
65031
|
});
|
|
65009
65032
|
require_chunk_Cek0wNdY();
|
|
65010
|
-
var require_dist10 =
|
|
65011
|
-
var require_retired_settings_keys =
|
|
65033
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
65034
|
+
var require_retired_settings_keys = require_retired_settings_keys_DtPZcaQ();
|
|
65012
65035
|
var node_crypto = __require("crypto");
|
|
65013
65036
|
var _camstack_types_node = require_node();
|
|
65014
65037
|
var JOB_HISTORY = 20;
|
|
@@ -70633,7 +70656,7 @@ var require_hub_forwarder = __commonJS({
|
|
|
70633
70656
|
[Symbol.toStringTag]: { value: "Module" }
|
|
70634
70657
|
});
|
|
70635
70658
|
require_chunk_Cek0wNdY();
|
|
70636
|
-
var require_dist10 =
|
|
70659
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
70637
70660
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
70638
70661
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
70639
70662
|
var HubForwarderDestination = class {
|
|
@@ -70770,7 +70793,7 @@ var require_liveness_monitor_addon = __commonJS({
|
|
|
70770
70793
|
"use strict";
|
|
70771
70794
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
70772
70795
|
require_chunk_Cek0wNdY();
|
|
70773
|
-
var require_dist10 =
|
|
70796
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
70774
70797
|
var NO_DEVICES = "liveness:no-devices";
|
|
70775
70798
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
70776
70799
|
var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
|
|
@@ -70966,7 +70989,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
70966
70989
|
[Symbol.toStringTag]: { value: "Module" }
|
|
70967
70990
|
});
|
|
70968
70991
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
70969
|
-
var require_dist10 =
|
|
70992
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
70970
70993
|
var node_crypto = __require("crypto");
|
|
70971
70994
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
70972
70995
|
var crypto$1 = __require("crypto");
|
|
@@ -78779,7 +78802,7 @@ var require_loki_logging = __commonJS({
|
|
|
78779
78802
|
[Symbol.toStringTag]: { value: "Module" }
|
|
78780
78803
|
});
|
|
78781
78804
|
require_chunk_Cek0wNdY();
|
|
78782
|
-
var require_dist10 =
|
|
78805
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
78783
78806
|
function sanitizeLabelName(raw) {
|
|
78784
78807
|
const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
|
|
78785
78808
|
return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
|
|
@@ -79344,7 +79367,7 @@ var require_native_metrics_addon = __commonJS({
|
|
|
79344
79367
|
[Symbol.toStringTag]: { value: "Module" }
|
|
79345
79368
|
});
|
|
79346
79369
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
79347
|
-
var require_dist10 =
|
|
79370
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
79348
79371
|
var node_fs_promises = __require("fs/promises");
|
|
79349
79372
|
var node_child_process = __require("child_process");
|
|
79350
79373
|
var node_util = __require("util");
|
|
@@ -81928,7 +81951,7 @@ var require_filesystem_storage_addon = __commonJS({
|
|
|
81928
81951
|
[Symbol.toStringTag]: { value: "Module" }
|
|
81929
81952
|
});
|
|
81930
81953
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
81931
|
-
var require_dist10 =
|
|
81954
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
81932
81955
|
var node_crypto = __require("crypto");
|
|
81933
81956
|
var node_fs_promises = __require("fs/promises");
|
|
81934
81957
|
var node_path = __require("path");
|
|
@@ -83044,8 +83067,8 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
83044
83067
|
[Symbol.toStringTag]: { value: "Module" }
|
|
83045
83068
|
});
|
|
83046
83069
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
83047
|
-
var require_dist10 =
|
|
83048
|
-
var require_retired_settings_keys =
|
|
83070
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
83071
|
+
var require_retired_settings_keys = require_retired_settings_keys_DtPZcaQ();
|
|
83049
83072
|
var node_crypto = __require("crypto");
|
|
83050
83073
|
var node_fs = __require("fs");
|
|
83051
83074
|
var node_module = __require("module");
|
|
@@ -85549,7 +85572,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
85549
85572
|
[Symbol.toStringTag]: { value: "Module" }
|
|
85550
85573
|
});
|
|
85551
85574
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
85552
|
-
var require_dist10 =
|
|
85575
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
85553
85576
|
var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
|
|
85554
85577
|
var zod = require_zod();
|
|
85555
85578
|
var node_crypto = __require("crypto");
|
|
@@ -88275,7 +88298,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
88275
88298
|
return Promise.all(rows.map(async (loc) => ({
|
|
88276
88299
|
...this.redacted(loc),
|
|
88277
88300
|
...this.occupancy.ownedFor(loc.id) !== void 0 ? { owned: this.occupancy.ownedFor(loc.id) } : {},
|
|
88278
|
-
capacity: require_dist10.
|
|
88301
|
+
capacity: require_dist10.mayReadLocation(loc) ? await this.localCapacityOf(loc) : null
|
|
88279
88302
|
})));
|
|
88280
88303
|
},
|
|
88281
88304
|
listLocationDeclarations: async () => service.listDeclarations(),
|
|
@@ -89105,7 +89128,7 @@ var require_system_config_addon = __commonJS({
|
|
|
89105
89128
|
[Symbol.toStringTag]: { value: "Module" }
|
|
89106
89129
|
});
|
|
89107
89130
|
require_chunk_Cek0wNdY();
|
|
89108
|
-
var require_dist10 =
|
|
89131
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
89109
89132
|
var SECTION_TITLES = {
|
|
89110
89133
|
server: "Server",
|
|
89111
89134
|
auth: "Authentication"
|
|
@@ -107166,7 +107189,7 @@ var require_winston_logging = __commonJS({
|
|
|
107166
107189
|
[Symbol.toStringTag]: { value: "Module" }
|
|
107167
107190
|
});
|
|
107168
107191
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
107169
|
-
var require_dist10 =
|
|
107192
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
107170
107193
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
107171
107194
|
var node_path = __require("path");
|
|
107172
107195
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -131776,7 +131799,7 @@ var require_dist3 = __commonJS({
|
|
|
131776
131799
|
"use strict";
|
|
131777
131800
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
131778
131801
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
131779
|
-
var require_dist10 =
|
|
131802
|
+
var require_dist10 = require_dist_CEUwB91M();
|
|
131780
131803
|
var require_builtins_alerts_alerts_addon = require_alerts_addon();
|
|
131781
131804
|
require_alerts();
|
|
131782
131805
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
@@ -226999,7 +227022,19 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
226999
227022
|
x: zod.z.number(),
|
|
227000
227023
|
y: zod.z.number(),
|
|
227001
227024
|
timestamp: zod.z.number(),
|
|
227002
|
-
bbox: BoundingBoxSchema
|
|
227025
|
+
bbox: BoundingBoxSchema,
|
|
227026
|
+
/**
|
|
227027
|
+
* Which detector pass measured this box (D399): `frame` is the full-frame
|
|
227028
|
+
* pass on the analysis raster, `recovery` is the native-resolution
|
|
227029
|
+
* small-subject second pass (D377/D378). Both write into one array, and until
|
|
227030
|
+
* this field existed the only way to tell them apart was that full-frame boxes
|
|
227031
|
+
* are exact multiples of 1.2 while recovery boxes are full-precision floats.
|
|
227032
|
+
* Absent on rows written before D399.
|
|
227033
|
+
*/
|
|
227034
|
+
source: zod.z.enum(["frame", "recovery"]).optional(),
|
|
227035
|
+
/** Detection score of this box, so a position can be weighed and not only
|
|
227036
|
+
* plotted. Absent on rows written before D399. */
|
|
227037
|
+
score: zod.z.number().optional()
|
|
227003
227038
|
});
|
|
227004
227039
|
var TrackSnapshotSchema = zod.z.object({
|
|
227005
227040
|
timestamp: zod.z.number(),
|
|
@@ -227259,14 +227294,25 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
227259
227294
|
*/
|
|
227260
227295
|
hasRider: zod.z.boolean().optional(),
|
|
227261
227296
|
/**
|
|
227262
|
-
* WHY this track ended without a NATIVE best-shot
|
|
227263
|
-
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)
|
|
227297
|
+
* WHY this track ended without a NATIVE best-shot FRAME
|
|
227298
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md),
|
|
227299
|
+
* widened by [D400](../decisions/adr-0400-the-picture-is-judged-on-what-is-delivered.md)) —
|
|
227264
227300
|
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
227265
|
-
* `derive-returned-null tile=standin`,
|
|
227266
|
-
*
|
|
227267
|
-
*
|
|
227301
|
+
* `derive-returned-null tile=standin`,
|
|
227302
|
+
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
227303
|
+
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
227304
|
+
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
227268
227305
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
227269
227306
|
*
|
|
227307
|
+
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
227308
|
+
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
227309
|
+
* while its key frame missed carried no reason at all — three of the four
|
|
227310
|
+
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
227311
|
+
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
227312
|
+
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
227313
|
+
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
227314
|
+
* tile ended up being.
|
|
227315
|
+
*
|
|
227270
227316
|
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
227271
227317
|
* that predates the field, and every track whose tile landed native all
|
|
227272
227318
|
* omit it. Render nothing when absent.
|