@koda-sl/baker-cli 0.482.0 → 0.483.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/README.md +1 -1
- package/dist/{animate-3LV3LHXQ.js → animate-SVEPM267.js} +4 -4
- package/dist/{brand-CINQG3JG.js → brand-LAIIXZBL.js} +2 -2
- package/dist/{brief-WAQ2V6Q4.js → brief-7PICJ4CO.js} +13 -13
- package/dist/{canvas-A4XKEBN7.js → canvas-YS3ONCCX.js} +13 -13
- package/dist/{catalog-SJBGNNY4.js → catalog-RS4F5YK3.js} +8 -8
- package/dist/{check-GCZ2ZBKH.js → check-5RW2MX7V.js} +9 -9
- package/dist/{chunk-XSGO44OV.js → chunk-27DJRM3F.js} +4 -4
- package/dist/{chunk-WMVTIKET.js → chunk-3PXC2OXT.js} +2 -2
- package/dist/{chunk-U2452GLO.js → chunk-4AMIHNNP.js} +11 -6
- package/dist/chunk-4AMIHNNP.js.map +1 -0
- package/dist/{chunk-5YKC2WWG.js → chunk-4S4WDXJR.js} +6 -6
- package/dist/{chunk-GQ6JS5MR.js → chunk-4VB7F422.js} +56 -11
- package/dist/{chunk-GQ6JS5MR.js.map → chunk-4VB7F422.js.map} +1 -1
- package/dist/{chunk-ELL2IQMF.js → chunk-62JQQUAU.js} +12 -11
- package/dist/chunk-62JQQUAU.js.map +1 -0
- package/dist/{chunk-2DHHL4PU.js → chunk-66WEOQV5.js} +3 -3
- package/dist/{chunk-5RCCESDX.js → chunk-AXDKLXCG.js} +120 -41
- package/dist/chunk-AXDKLXCG.js.map +1 -0
- package/dist/{chunk-6KK26F2T.js → chunk-BTY4LZBG.js} +2 -2
- package/dist/{chunk-Q7YZL7PG.js → chunk-CS5JF52J.js} +2 -2
- package/dist/{chunk-5NS4CNF6.js → chunk-E2RFM6R2.js} +5 -5
- package/dist/{chunk-BSEB55E6.js → chunk-EOY6BK4C.js} +2 -2
- package/dist/{chunk-MMVLRUMK.js → chunk-G2LGMWNG.js} +27 -12
- package/dist/chunk-G2LGMWNG.js.map +1 -0
- package/dist/{chunk-ZBV5IV5T.js → chunk-IKCP5NCE.js} +2 -2
- package/dist/{chunk-RTWRNG3E.js → chunk-IN6AW5P3.js} +18 -8
- package/dist/{chunk-RTWRNG3E.js.map → chunk-IN6AW5P3.js.map} +1 -1
- package/dist/{chunk-DF22CTXE.js → chunk-IX2QLW6G.js} +2 -2
- package/dist/{chunk-65N4ZPQD.js → chunk-JAC6JVCI.js} +2 -2
- package/dist/{chunk-V6PXHQSI.js → chunk-JWSEPW7F.js} +2 -2
- package/dist/{chunk-AS5VL32C.js → chunk-JYALBYN7.js} +2 -2
- package/dist/{chunk-R2TAVQGZ.js → chunk-K2JTERIO.js} +2 -2
- package/dist/{chunk-3S5YZWB7.js → chunk-KDWH2JKT.js} +10 -7
- package/dist/chunk-KDWH2JKT.js.map +1 -0
- package/dist/{chunk-T6ATGN7Y.js → chunk-MCJ5I5LR.js} +1 -1
- package/dist/chunk-MCJ5I5LR.js.map +1 -0
- package/dist/{chunk-U4W4LULB.js → chunk-MGIOV72F.js} +7 -7
- package/dist/{chunk-ORQKMXHA.js → chunk-MZPS46OR.js} +2 -2
- package/dist/{chunk-RDCYPWQZ.js → chunk-NEOUY3Q7.js} +34 -9
- package/dist/chunk-NEOUY3Q7.js.map +1 -0
- package/dist/{chunk-K2Z3KGOH.js → chunk-NPMAATZG.js} +2 -2
- package/dist/{chunk-2K3NCVDI.js → chunk-OKJVBGMQ.js} +31 -19
- package/dist/{chunk-2K3NCVDI.js.map → chunk-OKJVBGMQ.js.map} +1 -1
- package/dist/{chunk-PQTY22FR.js → chunk-PZPSCYN3.js} +9 -8
- package/dist/chunk-PZPSCYN3.js.map +1 -0
- package/dist/{chunk-KQDAFZKR.js → chunk-Q4WWS3UQ.js} +2 -2
- package/dist/{chunk-A2FKWRKO.js → chunk-R3N4AIKS.js} +6 -6
- package/dist/{chunk-DCTEL4KG.js → chunk-RVXMK4X2.js} +3 -3
- package/dist/{chunk-LD4CHA7U.js → chunk-UKL7GWEH.js} +2 -2
- package/dist/{chunk-4VWTIT5C.js → chunk-UWXDNVS5.js} +2 -2
- package/dist/{chunk-U6IWRZQF.js → chunk-VNNCYWNN.js} +3 -3
- package/dist/{chunk-7U3V64YT.js → chunk-WKLQFSV6.js} +4 -4
- package/dist/{chunk-WD5BQBVY.js → chunk-Z5SOZUUB.js} +3 -3
- package/dist/{chunk-AQ5WISEG.js → chunk-ZCQVKDHV.js} +2 -2
- package/dist/{chunk-RCSOG2DV.js → chunk-ZINMEMOB.js} +5 -5
- package/dist/cli.js +7 -7
- package/dist/{creatives-U2M4F3D5.js → creatives-NK5HOXSF.js} +10 -10
- package/dist/{critique-43OVWKN7.js → critique-EDMP5P5R.js} +16 -16
- package/dist/{critique-JVKJEBAC.js → critique-N5OL42C6.js} +5 -5
- package/dist/{customers-P4N4NXLJ.js → customers-TLAHWJY6.js} +4 -4
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.js +7 -7
- package/dist/{feedback-3GU3PAEI.js → feedback-OCN3XNKF.js} +19 -19
- package/dist/{feedback-record-PIJDOJW3.js → feedback-record-Z66AXZ57.js} +20 -20
- package/dist/{fit-TVQ7RK52.js → fit-PMSNW2PF.js} +11 -11
- package/dist/{fonts-BMUNDGOZ.js → fonts-I434ILTG.js} +7 -7
- package/dist/{generate-4HWNFAH3.js → generate-OMXBFGGR.js} +3 -3
- package/dist/{ideas-UTSCGCT6.js → ideas-K6FQVDUA.js} +8 -8
- package/dist/{landing-AJO2BPC2.js → landing-EJGYTI5W.js} +2 -2
- package/dist/{learn-RGO5KDHS.js → learn-66SKYR36.js} +6 -6
- package/dist/{make-IHJROEKG.js → make-ZYEFMAR6.js} +51 -37
- package/dist/make-ZYEFMAR6.js.map +1 -0
- package/dist/{models-2DQ5NBMT.js → models-2XRYXSRA.js} +2 -2
- package/dist/{rerun-R3DNEV5U.js → rerun-DZKHTK66.js} +24 -24
- package/dist/{research-MBAPL35Y.js → research-L2DH5P22.js} +2 -2
- package/dist/{rules-SZIY67QF.js → rules-TPW37OVS.js} +8 -8
- package/dist/{rules-add-KTLHU3YD.js → rules-add-HTL6IFQJ.js} +8 -8
- package/dist/{run-QYIUO4NB.js → run-EID2OD4U.js} +24 -24
- package/dist/{scaffold-ad-NIVJSO73.js → scaffold-ad-SQZMHTRA.js} +24 -24
- package/dist/{scaffold-static-ad-QX2NUXFR.js → scaffold-static-ad-L2JCW5LF.js} +30 -30
- package/dist/{scaffold-video-NXBM54K3.js → scaffold-video-2WLFALNV.js} +21 -21
- package/dist/{select-Q4S4CPKV.js → select-POYNXE2L.js} +18 -18
- package/dist/{set-prompt-3MVZW3L6.js → set-prompt-2OXPI4ZF.js} +17 -17
- package/dist/{stale-NT2JRQHY.js → stale-6HL4ELJW.js} +17 -17
- package/dist/{studio-YB5WXQYC.js → studio-MARZ22J2.js} +4 -4
- package/dist/{sync-definition-6XPX6VJU.js → sync-definition-VVNXDNDC.js} +20 -20
- package/dist/{translate-27DIFMBU.js → translate-ACGKNKQP.js} +21 -21
- package/dist/{validate-AYPLNS7A.js → validate-SUW24MMI.js} +20 -20
- package/dist/{viewer-check-TSH3SAYJ.js → viewer-check-7S2EB32L.js} +10 -10
- package/dist/{winning-ads-SGBI3WHK.js → winning-ads-T4MOKDYT.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-3S5YZWB7.js.map +0 -1
- package/dist/chunk-5RCCESDX.js.map +0 -1
- package/dist/chunk-ELL2IQMF.js.map +0 -1
- package/dist/chunk-MMVLRUMK.js.map +0 -1
- package/dist/chunk-PQTY22FR.js.map +0 -1
- package/dist/chunk-RDCYPWQZ.js.map +0 -1
- package/dist/chunk-T6ATGN7Y.js.map +0 -1
- package/dist/chunk-U2452GLO.js.map +0 -1
- package/dist/make-IHJROEKG.js.map +0 -1
- /package/dist/{animate-3LV3LHXQ.js.map → animate-SVEPM267.js.map} +0 -0
- /package/dist/{brand-CINQG3JG.js.map → brand-LAIIXZBL.js.map} +0 -0
- /package/dist/{brief-WAQ2V6Q4.js.map → brief-7PICJ4CO.js.map} +0 -0
- /package/dist/{canvas-A4XKEBN7.js.map → canvas-YS3ONCCX.js.map} +0 -0
- /package/dist/{catalog-SJBGNNY4.js.map → catalog-RS4F5YK3.js.map} +0 -0
- /package/dist/{check-GCZ2ZBKH.js.map → check-5RW2MX7V.js.map} +0 -0
- /package/dist/{chunk-XSGO44OV.js.map → chunk-27DJRM3F.js.map} +0 -0
- /package/dist/{chunk-WMVTIKET.js.map → chunk-3PXC2OXT.js.map} +0 -0
- /package/dist/{chunk-5YKC2WWG.js.map → chunk-4S4WDXJR.js.map} +0 -0
- /package/dist/{chunk-2DHHL4PU.js.map → chunk-66WEOQV5.js.map} +0 -0
- /package/dist/{chunk-6KK26F2T.js.map → chunk-BTY4LZBG.js.map} +0 -0
- /package/dist/{chunk-Q7YZL7PG.js.map → chunk-CS5JF52J.js.map} +0 -0
- /package/dist/{chunk-5NS4CNF6.js.map → chunk-E2RFM6R2.js.map} +0 -0
- /package/dist/{chunk-BSEB55E6.js.map → chunk-EOY6BK4C.js.map} +0 -0
- /package/dist/{chunk-ZBV5IV5T.js.map → chunk-IKCP5NCE.js.map} +0 -0
- /package/dist/{chunk-DF22CTXE.js.map → chunk-IX2QLW6G.js.map} +0 -0
- /package/dist/{chunk-65N4ZPQD.js.map → chunk-JAC6JVCI.js.map} +0 -0
- /package/dist/{chunk-V6PXHQSI.js.map → chunk-JWSEPW7F.js.map} +0 -0
- /package/dist/{chunk-AS5VL32C.js.map → chunk-JYALBYN7.js.map} +0 -0
- /package/dist/{chunk-R2TAVQGZ.js.map → chunk-K2JTERIO.js.map} +0 -0
- /package/dist/{chunk-U4W4LULB.js.map → chunk-MGIOV72F.js.map} +0 -0
- /package/dist/{chunk-ORQKMXHA.js.map → chunk-MZPS46OR.js.map} +0 -0
- /package/dist/{chunk-K2Z3KGOH.js.map → chunk-NPMAATZG.js.map} +0 -0
- /package/dist/{chunk-KQDAFZKR.js.map → chunk-Q4WWS3UQ.js.map} +0 -0
- /package/dist/{chunk-A2FKWRKO.js.map → chunk-R3N4AIKS.js.map} +0 -0
- /package/dist/{chunk-DCTEL4KG.js.map → chunk-RVXMK4X2.js.map} +0 -0
- /package/dist/{chunk-LD4CHA7U.js.map → chunk-UKL7GWEH.js.map} +0 -0
- /package/dist/{chunk-4VWTIT5C.js.map → chunk-UWXDNVS5.js.map} +0 -0
- /package/dist/{chunk-U6IWRZQF.js.map → chunk-VNNCYWNN.js.map} +0 -0
- /package/dist/{chunk-7U3V64YT.js.map → chunk-WKLQFSV6.js.map} +0 -0
- /package/dist/{chunk-WD5BQBVY.js.map → chunk-Z5SOZUUB.js.map} +0 -0
- /package/dist/{chunk-AQ5WISEG.js.map → chunk-ZCQVKDHV.js.map} +0 -0
- /package/dist/{chunk-RCSOG2DV.js.map → chunk-ZINMEMOB.js.map} +0 -0
- /package/dist/{creatives-U2M4F3D5.js.map → creatives-NK5HOXSF.js.map} +0 -0
- /package/dist/{critique-43OVWKN7.js.map → critique-EDMP5P5R.js.map} +0 -0
- /package/dist/{critique-JVKJEBAC.js.map → critique-N5OL42C6.js.map} +0 -0
- /package/dist/{customers-P4N4NXLJ.js.map → customers-TLAHWJY6.js.map} +0 -0
- /package/dist/{feedback-3GU3PAEI.js.map → feedback-OCN3XNKF.js.map} +0 -0
- /package/dist/{feedback-record-PIJDOJW3.js.map → feedback-record-Z66AXZ57.js.map} +0 -0
- /package/dist/{fit-TVQ7RK52.js.map → fit-PMSNW2PF.js.map} +0 -0
- /package/dist/{fonts-BMUNDGOZ.js.map → fonts-I434ILTG.js.map} +0 -0
- /package/dist/{generate-4HWNFAH3.js.map → generate-OMXBFGGR.js.map} +0 -0
- /package/dist/{ideas-UTSCGCT6.js.map → ideas-K6FQVDUA.js.map} +0 -0
- /package/dist/{landing-AJO2BPC2.js.map → landing-EJGYTI5W.js.map} +0 -0
- /package/dist/{learn-RGO5KDHS.js.map → learn-66SKYR36.js.map} +0 -0
- /package/dist/{models-2DQ5NBMT.js.map → models-2XRYXSRA.js.map} +0 -0
- /package/dist/{rerun-R3DNEV5U.js.map → rerun-DZKHTK66.js.map} +0 -0
- /package/dist/{research-MBAPL35Y.js.map → research-L2DH5P22.js.map} +0 -0
- /package/dist/{rules-SZIY67QF.js.map → rules-TPW37OVS.js.map} +0 -0
- /package/dist/{rules-add-KTLHU3YD.js.map → rules-add-HTL6IFQJ.js.map} +0 -0
- /package/dist/{run-QYIUO4NB.js.map → run-EID2OD4U.js.map} +0 -0
- /package/dist/{scaffold-ad-NIVJSO73.js.map → scaffold-ad-SQZMHTRA.js.map} +0 -0
- /package/dist/{scaffold-static-ad-QX2NUXFR.js.map → scaffold-static-ad-L2JCW5LF.js.map} +0 -0
- /package/dist/{scaffold-video-NXBM54K3.js.map → scaffold-video-2WLFALNV.js.map} +0 -0
- /package/dist/{select-Q4S4CPKV.js.map → select-POYNXE2L.js.map} +0 -0
- /package/dist/{set-prompt-3MVZW3L6.js.map → set-prompt-2OXPI4ZF.js.map} +0 -0
- /package/dist/{stale-NT2JRQHY.js.map → stale-6HL4ELJW.js.map} +0 -0
- /package/dist/{studio-YB5WXQYC.js.map → studio-MARZ22J2.js.map} +0 -0
- /package/dist/{sync-definition-6XPX6VJU.js.map → sync-definition-VVNXDNDC.js.map} +0 -0
- /package/dist/{translate-27DIFMBU.js.map → translate-ACGKNKQP.js.map} +0 -0
- /package/dist/{validate-AYPLNS7A.js.map → validate-SUW24MMI.js.map} +0 -0
- /package/dist/{viewer-check-TSH3SAYJ.js.map → viewer-check-7S2EB32L.js.map} +0 -0
- /package/dist/{winning-ads-SGBI3WHK.js.map → winning-ads-T4MOKDYT.js.map} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
finalOutputLabelsFromCanvas
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UWXDNVS5.js";
|
|
4
4
|
import {
|
|
5
5
|
readRenderState
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Q4WWS3UQ.js";
|
|
7
7
|
import {
|
|
8
8
|
STATIC_AD_ROLE,
|
|
9
9
|
fixBriefNode,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
plateFixPrompt,
|
|
15
15
|
sameTag,
|
|
16
16
|
seriesMemberAd
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-AXDKLXCG.js";
|
|
18
18
|
import {
|
|
19
19
|
fetchRunRecord
|
|
20
20
|
} from "./chunk-ABXTGAG7.js";
|
|
@@ -42,14 +42,14 @@ import {
|
|
|
42
42
|
relaidPictureRole,
|
|
43
43
|
rolesById,
|
|
44
44
|
staticMasterFormat
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-62JQQUAU.js";
|
|
46
46
|
import {
|
|
47
47
|
isAdSpec,
|
|
48
48
|
readAdSpec
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-4AMIHNNP.js";
|
|
50
50
|
import {
|
|
51
51
|
canonicalize
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-MCJ5I5LR.js";
|
|
53
53
|
import {
|
|
54
54
|
sha256Hex,
|
|
55
55
|
toModelSafeImage
|
|
@@ -939,4 +939,4 @@ export {
|
|
|
939
939
|
writeSeriesMemberCanvas,
|
|
940
940
|
seriesRunHints
|
|
941
941
|
};
|
|
942
|
-
//# sourceMappingURL=chunk-
|
|
942
|
+
//# sourceMappingURL=chunk-MGIOV72F.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MODEL_REGISTRY,
|
|
3
3
|
isRegisteredModel
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MCJ5I5LR.js";
|
|
5
5
|
|
|
6
6
|
// src/commands/canvas/scaffold-common.ts
|
|
7
7
|
import { access, readFile } from "fs/promises";
|
|
@@ -73,4 +73,4 @@ export {
|
|
|
73
73
|
fail,
|
|
74
74
|
fileExists
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-MZPS46OR.js.map
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
IDEA_VIDEO_FORMATS,
|
|
3
3
|
figuresIn,
|
|
4
4
|
unsourcedClaims
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-G2LGMWNG.js";
|
|
6
6
|
import {
|
|
7
7
|
AD_SPEC_SCHEMA,
|
|
8
8
|
unfitReasons
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4AMIHNNP.js";
|
|
10
10
|
import {
|
|
11
11
|
proofStrength
|
|
12
12
|
} from "./chunk-WNSE7N75.js";
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import { parse, parseDocument, Scalar, visit } from "yaml";
|
|
16
16
|
var REFERENCE_CANDIDATES = 6;
|
|
17
17
|
function isVideoIdea(idea) {
|
|
18
|
-
return IDEA_VIDEO_FORMATS.includes(idea.format);
|
|
18
|
+
return IDEA_VIDEO_FORMATS.includes(idea.format ?? "");
|
|
19
19
|
}
|
|
20
20
|
var BY_TEMPERATURE = {
|
|
21
21
|
cold: { audienceTemperature: "0_cold", excludeBrandReliant: true },
|
|
@@ -48,7 +48,28 @@ function referenceSearchesFor(idea, temperature, where = {}) {
|
|
|
48
48
|
const { query: _query, ...winners } = anyStage;
|
|
49
49
|
const { query: _anyQuery, country: _winnersCountry, ...winnersAnywhere } = anyViewer;
|
|
50
50
|
const inMarket = (steps) => where.country ? steps : [];
|
|
51
|
+
const shows = idea.shows?.trim();
|
|
52
|
+
const { formatPattern: _shownPattern, ...anyCategory } = { ...anyStage, scope: "all" };
|
|
53
|
+
const { country: _shownCountry, ...anyCategoryAnywhere } = anyCategory;
|
|
54
|
+
const { country: _viewerCountry, ...anyViewerAnywhere } = anyViewer;
|
|
55
|
+
const { formatPattern: _anyPattern, ...shownAnyViewer } = anyViewerAnywhere;
|
|
56
|
+
const kinds = (where.shows ?? []).flatMap((q) => q.trim() ? [{ ...anyCategoryAnywhere, query: q.trim() }] : []);
|
|
57
|
+
const shown = shows ? [
|
|
58
|
+
...inMarket([{ ...anyCategory, query: shows }]),
|
|
59
|
+
...kinds,
|
|
60
|
+
{ ...anyCategoryAnywhere, query: shows },
|
|
61
|
+
{ ...shownAnyViewer, query: shows },
|
|
62
|
+
...idea.format ? [{ ...anyViewerAnywhere, query: shows }] : []
|
|
63
|
+
] : [];
|
|
51
64
|
const anyAd = (query) => query?.trim() ? [...inMarket([{ ...anyContainer, query: query.trim() }]), { ...anyContainerAnywhere, query: query.trim() }] : [];
|
|
65
|
+
if (shows) {
|
|
66
|
+
return [
|
|
67
|
+
...shown,
|
|
68
|
+
...where.category ? [anyContainerAnywhere] : [],
|
|
69
|
+
...where.audience?.trim() ? [{ ...anyContainerAnywhere, query: where.audience.trim() }] : [],
|
|
70
|
+
{ ...winnersAnywhere, sort: "winner" }
|
|
71
|
+
];
|
|
72
|
+
}
|
|
52
73
|
return [
|
|
53
74
|
...where.country ? [strict, anyStage, anyContainer] : [strict, anyStage],
|
|
54
75
|
anywhere,
|
|
@@ -70,7 +91,8 @@ function referenceWhereOf(brief, fallback) {
|
|
|
70
91
|
category: brief.category,
|
|
71
92
|
...brief.industry ? { industry: brief.industry } : {},
|
|
72
93
|
...audience ? { audience } : {},
|
|
73
|
-
...brief.wider.length ? { wider: brief.wider } : {}
|
|
94
|
+
...brief.wider.length ? { wider: brief.wider } : {},
|
|
95
|
+
...brief.shows?.length ? { shows: brief.shows } : {}
|
|
74
96
|
};
|
|
75
97
|
}
|
|
76
98
|
function rankedForOf(brief, where, bet) {
|
|
@@ -83,7 +105,8 @@ function rankedForOf(brief, where, bet) {
|
|
|
83
105
|
...brief?.memesWhy ? { memesWhy: brief.memesWhy } : {},
|
|
84
106
|
...brief?.avoid.length ? { avoid: brief.avoid } : {},
|
|
85
107
|
message: bet.message,
|
|
86
|
-
who: bet.who
|
|
108
|
+
who: bet.who,
|
|
109
|
+
...bet.shows ? { shows: bet.shows } : {}
|
|
87
110
|
};
|
|
88
111
|
}
|
|
89
112
|
var brandKey = (name) => name.normalize("NFD").replace(new RegExp("\\p{M}", "gu"), "").toLowerCase().replace(/[^\p{L}\p{N}]/gu, "");
|
|
@@ -193,6 +216,7 @@ function fitBetOf(idea, personas, insights, market) {
|
|
|
193
216
|
message: idea.message,
|
|
194
217
|
awareness: idea.awareness,
|
|
195
218
|
angle: idea.angle,
|
|
219
|
+
...idea.shows ? { shows: idea.shows } : {},
|
|
196
220
|
...quotes.length > 0 ? { quotes } : {},
|
|
197
221
|
...market ? { market } : {}
|
|
198
222
|
};
|
|
@@ -215,15 +239,16 @@ function unsourcedCopyLines(specJson, corpus) {
|
|
|
215
239
|
}
|
|
216
240
|
var PHOTO_FORMATS = /photo|lifestyle|before_after|ugc|product|selfie|street/;
|
|
217
241
|
function ideaSpec(idea, who) {
|
|
218
|
-
const container = idea.format.replace(/_/g, " ");
|
|
242
|
+
const container = idea.format ? `, as a ${idea.format.replace(/_/g, " ")}` : "";
|
|
243
|
+
const shows = idea.shows ? ` (${idea.shows})` : "";
|
|
219
244
|
return {
|
|
220
245
|
schema: AD_SPEC_SCHEMA,
|
|
221
246
|
viewer: { who },
|
|
222
247
|
message: idea.message,
|
|
223
248
|
copy: [{ text: "[TODO: the headline, in the customer's words]", lettering: "designed", role: "headline" }],
|
|
224
249
|
scene: {
|
|
225
|
-
description: `[TODO: what the viewer sees
|
|
226
|
-
look: PHOTO_FORMATS.test(idea.format) ? "photo" : "designed"
|
|
250
|
+
description: `[TODO: what the viewer sees first${shows}${container}, that shows: ${idea.message}]`,
|
|
251
|
+
look: PHOTO_FORMATS.test(idea.format ?? idea.shows ?? "") ? "photo" : "designed"
|
|
227
252
|
},
|
|
228
253
|
colors: [],
|
|
229
254
|
references: [],
|
|
@@ -257,4 +282,4 @@ export {
|
|
|
257
282
|
unsourcedCopyLines,
|
|
258
283
|
ideaSpec
|
|
259
284
|
};
|
|
260
|
-
//# sourceMappingURL=chunk-
|
|
285
|
+
//# sourceMappingURL=chunk-NEOUY3Q7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/creatives/make-model.ts"],"sourcesContent":["/**\n * The rules `baker creatives make` applies to turn an idea into a creative: which reference to\n * look for, which one fits, and what the creative records about the idea it carries. Pure.\n */\nimport { proofStrength } from \"@baker/api/ad-library\";\nimport { parse, parseDocument, Scalar, visit } from \"yaml\";\nimport { AD_SPEC_SCHEMA, type AdSpec, unfitReasons } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport type { ViewerTemperature } from \"../../viewer-profile.ts\";\nimport type { PersonaEntry } from \"../canvas/viewer-check.ts\";\nimport type { FitAnswer, FitBet } from \"../winning-ads/fit.ts\";\nimport type { WinningAdsSearchArgs } from \"../winning-ads/search.ts\";\nimport { type EvidenceLevel, figuresIn, IDEA_VIDEO_FORMATS, type Idea, unsourcedClaims } from \"./ideas-model.ts\";\nimport type { ReferenceBrief } from \"./reference-brief.ts\";\nimport type { RankedFor } from \"./reference-rank.ts\";\n\nexport const REFERENCE_CANDIDATES = 6;\n\n/** Whether the idea is a video, built from beats, rather than a static from a reference. */\nexport function isVideoIdea(idea: Pick<Idea, \"format\">): boolean {\n return (IDEA_VIDEO_FORMATS as readonly string[]).includes(idea.format ?? \"\");\n}\n\n/** Who a reference was made for, by our viewer: a stranger's ad never leans on its own brand. */\nconst BY_TEMPERATURE: Record<ViewerTemperature, { audienceTemperature: string; excludeBrandReliant?: true }> = {\n cold: { audienceTemperature: \"0_cold\", excludeBrandReliant: true },\n warm: { audienceTemperature: \"1_warm_engaged,2_hot_visited\", excludeBrandReliant: true },\n hot: { audienceTemperature: \"3_customer\" },\n};\n\n/**\n * Where a reference is looked for: the company's market (`GB`), what it sells (\"rooftop solar\") and\n * who the ad is for (\"Bill-shocked homeowner\") and its broader industry (\"home energy\"), when known.\n */\nexport type ReferenceWhere = {\n country?: string;\n category?: string;\n audience?: string;\n /** Searches that widen from the ad, closest first: adjacent products, the same buyer, the same decision. */\n wider?: readonly string[];\n industry?: string;\n /** The kind of picture the idea shows, in the library's words (the brief's read of `shows`). */\n shows?: readonly string[];\n};\n\n/**\n * The library search for a static idea's reference: its container, made for our viewer, on what\n * the company sells (else the idea's message), in its market when given.\n */\nexport function referenceSearchFor(\n idea: Idea,\n temperature: ViewerTemperature,\n where: ReferenceWhere = {},\n): WinningAdsSearchArgs {\n return {\n query: where.category || idea.message,\n scope: \"followed-first\",\n platform: \"meta\",\n format: \"static\",\n formatPattern: idea.format,\n awareness: idea.awareness,\n ...BY_TEMPERATURE[temperature],\n ...(where.country ? { country: where.country } : {}),\n maxPerAdvertiser: 1,\n limit: REFERENCE_CANDIDATES,\n diverse: true,\n };\n}\n\n/**\n * The searches whose candidates are tried, best first. A proven ad of what the company sells comes\n * before the idea's container: its market, viewer and objections are ours, and its container is one\n * the thinking can keep or change. So: what the company sells, in its market (in the idea's\n * container for our viewer, loosened in turn, then any container), then anywhere; then ads made for\n * the same people, whatever they sell; then wider (an adjacent product, the same buyer buying\n * something else, the same kind of decision); then ads of the broader industry; then the message;\n * then the container's proven winners from any category, in the market and anywhere.\n * The library's judge scores an ad against the query: prod, Oct 2026, a customer's sentence about\n * one product matched no ad of another category and 13 of 15 ideas found nothing; dev, Oct 2026,\n * searched with the whole message, a UK solar installer's ads were checked against a crypto\n * exchange, a clinic and an English course, while the library held UK solar ads; and with the\n * container a filter, 7 of 10 companies found 0–2 ads of their own category.\n */\nexport function referenceSearchesFor(\n idea: Idea,\n temperature: ViewerTemperature,\n where: ReferenceWhere = {},\n): WinningAdsSearchArgs[] {\n const strict = referenceSearchFor(idea, temperature, where);\n const { awareness: _awareness, ...anyStage } = strict;\n const { audienceTemperature: _temperature, excludeBrandReliant: _reliant, ...viewerAny } = anyStage;\n const anyViewer = { ...viewerAny, scope: \"all\" as const };\n const { formatPattern: _pattern, ...anyContainer } = anyViewer;\n const { country: _country, ...anywhere } = anyViewer;\n const { country: _anyCountry, ...anyContainerAnywhere } = anyContainer;\n const { query: _query, ...winners } = anyStage;\n const { query: _anyQuery, country: _winnersCountry, ...winnersAnywhere } = anyViewer;\n const inMarket = (steps: WinningAdsSearchArgs[]) => (where.country ? steps : []);\n // What the idea shows, from any category: the picture that lands the message is found where it\n // won, and the ranking then asks whether it was made for our buyer.\n const shows = idea.shows?.trim();\n const { formatPattern: _shownPattern, ...anyCategory } = { ...anyStage, scope: \"all\" as const };\n const { country: _shownCountry, ...anyCategoryAnywhere } = anyCategory;\n const { country: _viewerCountry, ...anyViewerAnywhere } = anyViewer;\n const { formatPattern: _anyPattern, ...shownAnyViewer } = anyViewerAnywhere;\n const kinds = (where.shows ?? []).flatMap((q) => (q.trim() ? [{ ...anyCategoryAnywhere, query: q.trim() }] : []));\n const shown: WinningAdsSearchArgs[] = shows\n ? [\n ...inMarket([{ ...anyCategory, query: shows }]),\n ...kinds,\n { ...anyCategoryAnywhere, query: shows },\n { ...shownAnyViewer, query: shows },\n ...(idea.format ? [{ ...anyViewerAnywhere, query: shows }] : []),\n ]\n : [];\n const anyAd = (query: string | undefined) =>\n query?.trim()\n ? [...inMarket([{ ...anyContainer, query: query.trim() }]), { ...anyContainerAnywhere, query: query.trim() }]\n : [];\n // With what it shows searched first, the company's category is a short fallback: every search\n // runs at once, and the full ladder beside them ran a make out of its time (dev, Oct 2026).\n if (shows) {\n return [\n ...shown,\n ...(where.category ? [anyContainerAnywhere] : []),\n ...(where.audience?.trim() ? [{ ...anyContainerAnywhere, query: where.audience.trim() }] : []),\n { ...winnersAnywhere, sort: \"winner\" },\n ];\n }\n return [\n ...(where.country ? [strict, anyStage, anyContainer] : [strict, anyStage]),\n anywhere,\n anyContainerAnywhere,\n ...anyAd(where.audience),\n ...(where.wider ?? []).flatMap((q) => (q.trim() ? [{ ...anyContainerAnywhere, query: q.trim() }] : [])),\n ...anyAd(where.industry),\n ...(where.category ? [{ ...anyContainerAnywhere, query: idea.message }] : []),\n ...inMarket([{ ...winners, sort: \"winner\" }]),\n { ...winnersAnywhere, sort: \"winner\" },\n ];\n}\n\n/**\n * Where a reference is looked for, from the brief when the model read one (its market over the\n * notes' guess; every market when it says the ad runs in several), else from the notes. Pure.\n */\nexport function referenceWhereOf(brief: ReferenceBrief | null, fallback: ReferenceWhere): ReferenceWhere {\n if (!brief) return fallback;\n const country = brief.country === null ? undefined : (brief.country ?? fallback.country);\n const audience = brief.audience ?? fallback.audience;\n return {\n ...(country ? { country } : {}),\n category: brief.category,\n ...(brief.industry ? { industry: brief.industry } : {}),\n ...(audience ? { audience } : {}),\n ...(brief.wider.length ? { wider: brief.wider } : {}),\n ...(brief.shows?.length ? { shows: brief.shows } : {}),\n };\n}\n\n/** The ad being made, as candidates are ranked and picked for it: the brief's read, else the search's words. Pure. */\nexport function rankedForOf(\n brief: ReferenceBrief | null,\n where: ReferenceWhere,\n bet: Pick<FitBet, \"who\" | \"message\" | \"shows\">,\n): RankedFor {\n return {\n category: brief?.category ?? where.category ?? bet.message,\n ...(brief?.industry ? { industry: brief.industry } : {}),\n ...(brief?.buyer ? { buyer: brief.buyer } : {}),\n ...(brief?.humour ? { humour: brief.humour } : {}),\n ...(brief?.memes ? { memes: brief.memes } : {}),\n ...(brief?.memesWhy ? { memesWhy: brief.memesWhy } : {}),\n ...(brief?.avoid.length ? { avoid: brief.avoid } : {}),\n message: bet.message,\n who: bet.who,\n ...(bet.shows ? { shows: bet.shows } : {}),\n };\n}\n\n/** A name as the library and a person may both spell it: no accents, case or punctuation. Pure. */\nconst brandKey = (name: string) =>\n name\n .normalize(\"NFD\")\n .replace(/\\p{M}/gu, \"\")\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}]/gu, \"\");\n\n/** Whether an ad's advertiser is the company itself, by its brand names (three letters or more). Pure. */\nexport function isOwnBrand(advertiser: string | null | undefined, brands: readonly string[]): boolean {\n const page = brandKey(advertiser ?? \"\");\n return page !== \"\" && brands.some((b) => brandKey(b).length >= 3 && page.includes(brandKey(b)));\n}\n\ntype PoolCandidate = { ad_id?: string | null; advertiser_id?: string | null; winner_score?: number | null };\n\n/**\n * Every search's candidates in one list, the better search's first, one ad per brand (each fit\n * tried is another brand's move), the ads whose run barely proves them (`proofStrength` \"little\")\n * after the proven ones, at most `limit`. Pure.\n */\nexport function pooledCandidates<T extends PoolCandidate>(searches: readonly T[][], limit: number): T[] {\n const seen = new Set<string>();\n const pooled: T[] = [];\n for (const candidate of searches.flat()) {\n const brand = candidate.advertiser_id ? `brand:${candidate.advertiser_id}` : null;\n if (!candidate.ad_id || seen.has(candidate.ad_id) || (brand && seen.has(brand))) continue;\n seen.add(candidate.ad_id);\n if (brand) seen.add(brand);\n pooled.push(candidate);\n }\n const proven = (c: T) => proofStrength(c.winner_score) !== \"little\";\n return [...pooled.filter(proven), ...pooled.filter((c) => !proven(c))].slice(0, limit);\n}\n\n/** The proven ads, and their brands, the workspace's other creatives are already built on. */\nexport type TakenReferences = { adIds: ReadonlySet<string>; advertiserIds: ReadonlySet<string> };\n\n/**\n * The candidates no other creative is built on first (neither the ad nor its brand), then the\n * rest, each in its order: a batch of ideas is no longer built on one winning ad over and over,\n * and one already used is still built on when nothing else fits. Pure.\n */\nexport function freshReferencesFirst<T extends PoolCandidate>(candidates: readonly T[], taken: TakenReferences): T[] {\n return [\n ...candidates.filter((c) => !isTakenReference(c, taken)),\n ...candidates.filter((c) => isTakenReference(c, taken)),\n ];\n}\n\n/** Whether another creative is built on this ad or on another ad of its brand. Pure. */\nexport function isTakenReference(c: PoolCandidate, taken: TakenReferences): boolean {\n return (\n (c.ad_id != null && taken.adIds.has(c.ad_id)) ||\n (c.advertiser_id != null && taken.advertiserIds.has(c.advertiser_id))\n );\n}\n\n/** A reference fits when what it wins on is something we can supply, and our viewer would stop for it. */\nexport function fitsIdea(fit: Pick<FitAnswer, \"verdict\" | \"load_bearing\" | \"our_viewer\">): boolean {\n return fit.verdict !== \"reject\" && missingElements(fit).length === 0 && fit.our_viewer?.stops !== \"no\";\n}\n\n/** The load-bearing elements a reference wins on that we have nothing for. Pure. */\nexport function missingElements(fit: Pick<FitAnswer, \"load_bearing\">): string[] {\n return fit.load_bearing.filter((l) => l.have === \"missing\" && !l.ours?.trim()).map((l) => l.element);\n}\n\n/**\n * Why a checked reference was not built on, in one line the person can hear: what stops the scroll\n * or the proof that cannot be ours first, with the rule that forbids it; else that our viewer would\n * not stop for it; else the check's own note. Pure.\n */\nexport function whyUnfit(fit: Pick<FitAnswer, \"load_bearing\" | \"our_viewer\" | \"transfer_note\">): string {\n const reasons = unfitReasons(fit);\n if (reasons.length > 0) return reasons.join(\"; \");\n if (fit.our_viewer?.stops === \"no\") {\n return `our viewer would not stop for it${fit.our_viewer.why ? `: ${fit.our_viewer.why}` : \"\"}`;\n }\n return fit.transfer_note?.trim() || \"the check found it does not carry this ad\";\n}\n\nexport type DefinitionStrategyFields = {\n idea: string;\n message: string;\n evidence?: EvidenceLevel;\n angle: string;\n persona: string;\n awareness: string;\n hypothesis: string;\n};\n\n/** What a creative records about the idea it executes. */\nexport function definitionFieldsOf(idea: Idea, evidence: EvidenceLevel | \"explore\"): DefinitionStrategyFields {\n return {\n idea: idea.id,\n message: idea.message,\n ...(evidence !== \"explore\" ? { evidence } : {}),\n angle: idea.angle,\n persona: idea.who,\n awareness: idea.awareness,\n hypothesis: idea.why,\n };\n}\n\nconst FRONTMATTER = /^---\\r?\\n([\\s\\S]*?\\r?\\n)?---/;\n\n/** Whether a bare string reads back as the same text under YAML 1.1. */\nfunction readsAsText11(text: string): boolean {\n try {\n return parse(text, { version: \"1.1\" }) === text;\n } catch {\n return false;\n }\n}\n\n/** Set fields in a markdown file's frontmatter, keeping every other field and the body. */\nexport function setDefinitionFields(raw: string, fields: Record<string, unknown>): string {\n const match = raw.match(FRONTMATTER);\n if (!match) return raw;\n const doc = parseDocument(match[1] ?? \"\");\n if (doc.errors.length > 0) return raw;\n for (const [key, value] of Object.entries(fields)) {\n if (value === undefined) continue;\n const node = doc.createNode(value);\n // The site reads frontmatter as YAML 1.1, where a bare 2026-10-04 is a date, not text.\n visit(node, {\n Scalar(_, scalar) {\n if (typeof scalar.value === \"string\" && !readsAsText11(scalar.value)) {\n scalar.type = Scalar.QUOTE_DOUBLE;\n }\n },\n });\n doc.set(key, node);\n }\n return `---\\n${doc.toString()}---${raw.slice(match[0].length)}`;\n}\n\n/** The ad spec with the idea's message as the one thing it tells the viewer. */\nexport function setSpecMessage(specJson: string, message: string): string {\n const spec = JSON.parse(specJson) as Record<string, unknown>;\n return `${JSON.stringify({ ...spec, message }, null, 2)}\\n`;\n}\n\n/**\n * The ad spec made for the idea's persona: its title and segment from the Knowledge (\"The owner on\n * the move (Owner, 30–55, 1–10 staff)\"), else the idea's own words. The image prompt, the casting\n * check and the viewer check all read `viewer.who`; a reference-built spec held only the\n * scaffold's placeholder. The market and what the viewer knows are kept. Pure.\n */\nexport function setSpecViewer(specJson: string, idea: Pick<Idea, \"who\">, personas: readonly PersonaEntry[]): string {\n const spec = JSON.parse(specJson) as Record<string, unknown>;\n const viewer = (spec.viewer ?? {}) as Record<string, unknown>;\n return `${JSON.stringify({ ...spec, viewer: { ...viewer, who: personaWho(idea, personas) } }, null, 2)}\\n`;\n}\n\n/** Who an idea is for, in its persona's words (\"The owner on the move (Owner, 30–55)\"), else its own. Pure. */\nexport function personaWho(idea: Pick<Idea, \"who\">, personas: readonly PersonaEntry[]): string {\n const persona = personas.find((p) => p.slug === idea.who);\n if (persona?.title) return `${persona.title}${persona.segment ? ` (${persona.segment})` : \"\"}`;\n return persona?.segment ?? idea.who.replace(/[-_]/g, \" \");\n}\n\n/** The most words the audience search keeps: the library's judge reads a long query slowly. */\nconst AUDIENCE_QUERY_WORDS = 9;\n\n/**\n * The people the idea is for, as a library search: its persona's own words, cut short. Dev, Oct\n * 2026: \"homeowners worried about rising energy bills\" found twelve proven energy ads where\n * \"rooftop solar\" in the idea's container found one. Pure.\n */\nexport function audienceQuery(idea: Pick<Idea, \"who\">, personas: readonly PersonaEntry[]): string {\n return personaWho(idea, personas)\n .replace(/\\(/g, \" \")\n .replace(/\\)/g, \"\")\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, AUDIENCE_QUERY_WORDS)\n .join(\" \")\n .replace(/[\\s,;:.–—-]+$/, \"\");\n}\n\n/** The ad being made, as the fit judges a reference for it: its persona, message and the customers' words it stands on. Pure. */\nexport function fitBetOf(\n idea: Pick<Idea, \"who\" | \"message\" | \"awareness\" | \"angle\" | \"evidence\" | \"shows\">,\n personas: readonly PersonaEntry[],\n insights: readonly { id: string; quote: string }[],\n market?: string,\n): FitBet {\n const quotes = insights.filter((i) => idea.evidence.includes(i.id)).map((i) => i.quote);\n return {\n who: personaWho(idea, personas),\n message: idea.message,\n awareness: idea.awareness,\n angle: idea.angle,\n ...(idea.shows ? { shows: idea.shows } : {}),\n ...(quotes.length > 0 ? { quotes } : {}),\n ...(market ? { market } : {}),\n };\n}\n\n/**\n * The ad spec with the concept the reference's fit read (`conceptFromFit`): a build started before\n * the fit answered has none, or only the one the scaffold drafted from its describe, which names no\n * reference and nothing of what we have; without the fit's, the render never sees the reference at\n * the level that won. A concept a fit already seeded (it names its reference) stays. Pure.\n */\nexport function withFitConcept(specJson: string, seeded: Record<string, unknown>): string {\n const spec = JSON.parse(specJson) as Record<string, unknown>;\n const held = spec.concept as { reference_ad_id?: unknown } | undefined;\n if (held?.reference_ad_id) return specJson;\n return `${JSON.stringify({ ...spec, ...seeded }, null, 2)}\\n`;\n}\n\n/**\n * The copy lines the scaffold drafted that claim a figure the company never wrote: a draft written\n * beside a competitor's ad can carry the competitor's promise. `corpus` is what the company wrote.\n */\nexport function unsourcedCopyLines(specJson: string, corpus: string): string[] {\n const spec = JSON.parse(specJson) as { copy?: unknown };\n const figures = figuresIn(corpus);\n const lines = Array.isArray(spec.copy) ? spec.copy : [];\n return lines.flatMap((line) => {\n const text = typeof line === \"object\" && line !== null ? (line as { text?: unknown }).text : undefined;\n return typeof text === \"string\" && unsourcedClaims(text, figures).length > 0 ? [text] : [];\n });\n}\n\n/** Containers shown as a photograph; every other container is a designed graphic or a screen. */\nconst PHOTO_FORMATS = /photo|lifestyle|before_after|ugc|product|selfie|street/;\n\n/**\n * The ad spec an idea starts from when no proven ad fits it: the message and who it is for are\n * the idea's; the scene and the copy are placeholders the agent writes before anything renders\n * (`canvas run` refuses a placeholder). Pure.\n */\nexport function ideaSpec(idea: Idea, who: string): AdSpec {\n const container = idea.format ? `, as a ${idea.format.replace(/_/g, \" \")}` : \"\";\n const shows = idea.shows ? ` (${idea.shows})` : \"\";\n return {\n schema: AD_SPEC_SCHEMA,\n viewer: { who },\n message: idea.message,\n copy: [{ text: \"[TODO: the headline, in the customer's words]\", lettering: \"designed\", role: \"headline\" }],\n scene: {\n description: `[TODO: what the viewer sees first${shows}${container}, that shows: ${idea.message}]`,\n look: PHOTO_FORMATS.test(idea.format ?? idea.shows ?? \"\") ? \"photo\" : \"designed\",\n },\n colors: [],\n references: [],\n logo: true,\n third_party_brands: [],\n scene_text: [],\n mechanism: [],\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
REF_PREFIX
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-62JQQUAU.js";
|
|
4
4
|
|
|
5
5
|
// src/commands/canvas/node-preview.ts
|
|
6
6
|
var MAX_PARAMS_PREVIEW_LENGTH = 4e3;
|
|
@@ -61,4 +61,4 @@ ${body}` : header || body || compactJson(record);
|
|
|
61
61
|
export {
|
|
62
62
|
nodeParamsPreview
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-NPMAATZG.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
nodeParamsPreview
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NPMAATZG.js";
|
|
4
4
|
import {
|
|
5
5
|
outputRatioWarningsFor,
|
|
6
6
|
shownBaseline,
|
|
7
7
|
shownVersion
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4S4WDXJR.js";
|
|
9
9
|
import {
|
|
10
10
|
waitForSheet
|
|
11
11
|
} from "./chunk-WN4KX7GE.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
variantImage,
|
|
37
37
|
versionRun,
|
|
38
38
|
writeSeriesMemberCanvas
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-MGIOV72F.js";
|
|
40
40
|
import {
|
|
41
41
|
buildFailedRunRecord,
|
|
42
42
|
buildInitialRunRecord,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
finalOutputLabelsFromCanvas,
|
|
47
47
|
nodeOutputsToRecord,
|
|
48
48
|
withFacts
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-UWXDNVS5.js";
|
|
50
50
|
import {
|
|
51
51
|
clearLegacyDirtyMarker,
|
|
52
52
|
readRenderState,
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
recordReviewOutcome,
|
|
56
56
|
recordSeriesLeadRun,
|
|
57
57
|
recordSnapshot
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-Q4WWS3UQ.js";
|
|
59
59
|
import {
|
|
60
60
|
BRAND_LOGO_ROLE,
|
|
61
61
|
CLAIMS_MODEL,
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
uncastPeople,
|
|
86
86
|
wireNamedPeople,
|
|
87
87
|
wireProofBadges
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-AXDKLXCG.js";
|
|
89
89
|
import {
|
|
90
90
|
ViewerAnswerSchema,
|
|
91
91
|
describeViewer,
|
|
@@ -105,10 +105,10 @@ import {
|
|
|
105
105
|
viewerCheckBeforeRender,
|
|
106
106
|
viewerCheckSkip,
|
|
107
107
|
viewerChecksSpent
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-IN6AW5P3.js";
|
|
109
109
|
import {
|
|
110
110
|
heldRules
|
|
111
|
-
} from "./chunk-
|
|
111
|
+
} from "./chunk-ZINMEMOB.js";
|
|
112
112
|
import {
|
|
113
113
|
readAvatars,
|
|
114
114
|
writeAvatars
|
|
@@ -116,11 +116,11 @@ import {
|
|
|
116
116
|
import {
|
|
117
117
|
readCaseFile,
|
|
118
118
|
readCompanyReading
|
|
119
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-WKLQFSV6.js";
|
|
120
120
|
import {
|
|
121
121
|
frontmatterOf,
|
|
122
122
|
ruleTells
|
|
123
|
-
} from "./chunk-
|
|
123
|
+
} from "./chunk-G2LGMWNG.js";
|
|
124
124
|
import {
|
|
125
125
|
holdUnbilledSpend,
|
|
126
126
|
holdWhenSettled,
|
|
@@ -142,7 +142,7 @@ import {
|
|
|
142
142
|
resolveConcurrency,
|
|
143
143
|
sizeDifferenceFinding,
|
|
144
144
|
ulid
|
|
145
|
-
} from "./chunk-
|
|
145
|
+
} from "./chunk-4VB7F422.js";
|
|
146
146
|
import {
|
|
147
147
|
BackendClient,
|
|
148
148
|
LOGO_COMPOSITE_ROLE,
|
|
@@ -177,7 +177,7 @@ import {
|
|
|
177
177
|
staticMasterFormat,
|
|
178
178
|
textColourSource,
|
|
179
179
|
usesTextColour
|
|
180
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-62JQQUAU.js";
|
|
181
181
|
import {
|
|
182
182
|
bytesOf,
|
|
183
183
|
judgeWinner,
|
|
@@ -186,10 +186,10 @@ import {
|
|
|
186
186
|
reviewRenderedStatic,
|
|
187
187
|
samePictureSizes,
|
|
188
188
|
staticVerdict
|
|
189
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-E2RFM6R2.js";
|
|
190
190
|
import {
|
|
191
191
|
reviewAgainstRules
|
|
192
|
-
} from "./chunk-
|
|
192
|
+
} from "./chunk-BTY4LZBG.js";
|
|
193
193
|
import {
|
|
194
194
|
AdSpecSchema,
|
|
195
195
|
adSpecJsonSchema,
|
|
@@ -204,7 +204,7 @@ import {
|
|
|
204
204
|
nativeSurfaceName,
|
|
205
205
|
readAdSpec,
|
|
206
206
|
readInterfaceWords
|
|
207
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-4AMIHNNP.js";
|
|
208
208
|
import {
|
|
209
209
|
RENDER_REVIEW_MODEL,
|
|
210
210
|
RENDER_REVIEW_UNAVAILABLE,
|
|
@@ -215,12 +215,12 @@ import {
|
|
|
215
215
|
rulesDigest,
|
|
216
216
|
sceneWindowsBeside,
|
|
217
217
|
videoPathFromOutput
|
|
218
|
-
} from "./chunk-
|
|
218
|
+
} from "./chunk-IKCP5NCE.js";
|
|
219
219
|
import {
|
|
220
220
|
GLANCE_CHECK_MODEL,
|
|
221
221
|
VIEWER_CHECK_MODEL,
|
|
222
222
|
nearestSupportedAspectRatio
|
|
223
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-MCJ5I5LR.js";
|
|
224
224
|
import {
|
|
225
225
|
describeMarket
|
|
226
226
|
} from "./chunk-KPYDTIAI.js";
|
|
@@ -1762,6 +1762,7 @@ import sharp2 from "sharp";
|
|
|
1762
1762
|
var SOLID = 250;
|
|
1763
1763
|
var SAME_COLOUR = 60;
|
|
1764
1764
|
var LOGO_MATCH = 0.98;
|
|
1765
|
+
var DRAWN_LOGO_MATCH = 0.9;
|
|
1765
1766
|
var COARSE_WIDTH = 180;
|
|
1766
1767
|
var MIN_SHOWN = 0.4;
|
|
1767
1768
|
var MAIN_COLOUR = 0.12;
|
|
@@ -2025,6 +2026,13 @@ function mismatch(format, agreement) {
|
|
|
2025
2026
|
kind: { item: "logo", element: "logo", defect: "other", edges: [] }
|
|
2026
2027
|
};
|
|
2027
2028
|
}
|
|
2029
|
+
function drawnMismatch(format, agreement) {
|
|
2030
|
+
return {
|
|
2031
|
+
severity: "blocking",
|
|
2032
|
+
what: `${format}: the logo drawn is not the brand's logo (only ${pct2(agreement)} of it matches the file); draw this size again with the brand's logo copied exactly from the logo file, letter for letter.`,
|
|
2033
|
+
kind: { item: "logo", element: "logo", defect: "other", edges: [] }
|
|
2034
|
+
};
|
|
2035
|
+
}
|
|
2028
2036
|
function searchWidths(frameWidth) {
|
|
2029
2037
|
const widths = [];
|
|
2030
2038
|
for (let w = frameWidth * 0.08; w <= frameWidth * 0.45; w *= 1.04) widths.push(Math.round(w));
|
|
@@ -2072,7 +2080,7 @@ async function drawnLogoFinding(image, arts) {
|
|
|
2072
2080
|
const frame2 = { width: picture.width, height: picture.height };
|
|
2073
2081
|
const cut = placementProblems({ frame: frame2, safe: NO_MARGIN, logo: drawn.box });
|
|
2074
2082
|
if (cut.length > 0) return cut.map((p) => said(image.format, p));
|
|
2075
|
-
return drawn.agreement <
|
|
2083
|
+
return drawn.agreement < DRAWN_LOGO_MATCH ? [drawnMismatch(image.format, drawn.agreement)] : [];
|
|
2076
2084
|
}
|
|
2077
2085
|
async function deliveredLogoFindings(parsed, outputsByNode, images, inks = ["#000000", "#FFFFFF"]) {
|
|
2078
2086
|
const nodes = nodesOf2(parsed);
|
|
@@ -2686,6 +2694,10 @@ function acceptRepair(before, answer, held = { rules: [] }) {
|
|
|
2686
2694
|
const kept = printedWords(now.data);
|
|
2687
2695
|
const said2 = printedWords(was.data);
|
|
2688
2696
|
if (!said2.every((text) => kept.includes(text))) return null;
|
|
2697
|
+
if (was.data.native) {
|
|
2698
|
+
const shown = now.data.native ? nativeCopy(now.data.native) : [];
|
|
2699
|
+
if (!nativeCopy(was.data.native).every((text) => shown.includes(text))) return null;
|
|
2700
|
+
}
|
|
2689
2701
|
const added = kept.filter((text) => !said2.includes(text));
|
|
2690
2702
|
if (ruleTells(added, held.rules, held.language).some((t) => t.kind === "forbidden")) return null;
|
|
2691
2703
|
return { changed: parsed.data.changed, spec };
|
|
@@ -3853,4 +3865,4 @@ export {
|
|
|
3853
3865
|
executeCanvasRun,
|
|
3854
3866
|
buildBackendClient
|
|
3855
3867
|
};
|
|
3856
|
-
//# sourceMappingURL=chunk-
|
|
3868
|
+
//# sourceMappingURL=chunk-OKJVBGMQ.js.map
|