@synap-core/workspace-templates 0.12.0 → 0.24.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 +509 -0
- package/automations/bookmark-enrichment.automation.json +321 -0
- package/automations/github-pr-events.automation.json +505 -0
- package/automations/mail-feed.automation.json +86 -0
- package/automations/ship-a-change-checks-green.automation.json +106 -0
- package/automations/ship-a-change-checks-red.automation.json +106 -0
- package/automations/ship-a-change-deployed.automation.json +56 -0
- package/automations/ship-a-change-pr-merged.automation.json +110 -0
- package/automations/ship-a-change-pr-opened.automation.json +104 -0
- package/automations/url-bookmark-capture.automation.json +132 -0
- package/capabilities/agency-skills.capability.json +157 -0
- package/capabilities/apify.capability.json +265 -0
- package/capabilities/apollo.capability.json +120 -0
- package/capabilities/arch-backend.capability.json +97 -0
- package/capabilities/arch-client-intelligence.capability.json +401 -0
- package/capabilities/backblaze-b2.capability.json +205 -0
- package/capabilities/cal-com.capability.json +266 -0
- package/capabilities/canva.capability.json +274 -0
- package/capabilities/claude-code-routines.capability.json +172 -0
- package/capabilities/claude-managed-agents.capability.json +215 -0
- package/capabilities/client-comms-report.capability.json +246 -0
- package/capabilities/content-idea-to-production.capability.json +29 -0
- package/capabilities/datagouv.capability.json +315 -0
- package/capabilities/discord-bot.capability.json +157 -0
- package/capabilities/dropbox.capability.json +281 -0
- package/capabilities/exa.capability.json +109 -0
- package/capabilities/fal-ai.capability.json +83 -0
- package/capabilities/fal-media-lab.capability.json +158 -0
- package/capabilities/fireflies.capability.json +191 -0
- package/capabilities/freellmapi.capability.json +114 -0
- package/capabilities/generic-apikey.capability.json +92 -0
- package/capabilities/github-merge.capability.json +99 -0
- package/capabilities/github-read.capability.json +325 -0
- package/capabilities/governance-tighten-recommender.capability.json +81 -0
- package/capabilities/jev.capability.json +226 -0
- package/capabilities/lead-conversion-enrollment.capability.json +246 -0
- package/capabilities/mail-feed.capability.json +277 -0
- package/capabilities/mailgun.capability.json +52 -0
- package/capabilities/nango-google.capability.json +639 -0
- package/capabilities/notion.capability.json +417 -0
- package/capabilities/omniroute.capability.json +137 -0
- package/capabilities/posthog-analytics.capability.json +258 -0
- package/capabilities/postiz.capability.json +467 -0
- package/capabilities/proactive-digest.capability.json +190 -0
- package/capabilities/proton.capability.json +288 -0
- package/capabilities/replicate-rvm.capability.json +97 -0
- package/capabilities/research-methods.capability.json +57 -0
- package/capabilities/shopify.capability.json +395 -0
- package/capabilities/slack.capability.json +369 -0
- package/capabilities/stripe.capability.json +1496 -0
- package/capabilities/telegram-bridge.capability.json +56 -0
- package/capabilities/treg.capability.json +102 -0
- package/capabilities/unipile-linkedin.capability.json +494 -0
- package/capabilities/vercel.capability.json +424 -0
- package/dist/define-DqoItRiR.d.ts +1370 -0
- package/dist/index.d.ts +174 -900
- package/dist/index.js +26447 -24075
- package/dist/index.js.map +1 -1
- package/dist/wire.d.ts +222 -0
- package/dist/wire.js +77 -0
- package/dist/wire.js.map +1 -0
- package/package.json +27 -4
- package/retired.yaml +136 -0
- package/skills/app-factory-build-slice/SKILL.md +70 -0
- package/skills/app-factory-build-slice.catalog.json +17 -0
- package/skills/app-factory-design-canvas/SKILL.md +96 -0
- package/skills/app-factory-design-canvas.catalog.json +17 -0
- package/skills/app-factory-design-review/SKILL.md +105 -0
- package/skills/app-factory-design-review.catalog.json +18 -0
- package/skills/app-factory-research/SKILL.md +123 -0
- package/skills/app-factory-research.catalog.json +17 -0
- package/skills/bookmark-enrichment/SKILL.md +40 -0
- package/skills/carousel-format/carousel-format.skill.json +18 -0
- package/skills/collage-broll/collage-broll.skill.json +20 -0
- package/skills/content-taste/content-taste.skill.json +18 -0
- package/skills/creative-director/creative-director.skill.json +18 -0
- package/skills/design-critique/SKILL.md +138 -0
- package/skills/design-critique.catalog.json +12 -0
- package/skills/designing-with-real-components/SKILL.md +140 -0
- package/skills/designing-with-real-components.catalog.json +12 -0
- package/skills/edit-loop/edit-loop.skill.json +25 -0
- package/skills/facecam-edit/facecam-edit.skill.json +24 -0
- package/skills/mapping-the-server/SKILL.md +54 -0
- package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
- package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
- package/skills/open-design-edit/open-design-edit.skill.json +24 -0
- package/skills/reading-client-progress/SKILL.md +65 -0
- package/skills/routing-to-channels/SKILL.md +54 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/skills/video-direction/video-direction.skill.json +20 -0
- package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
- package/skills/video-toolbox/video-toolbox.skill.json +20 -0
- package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
- package/src/agency-os.yaml +122 -0
- package/src/agent-os-skill-slugs.test.ts +65 -0
- package/src/apify-social-reader.test.ts +317 -0
- package/src/base.yaml +85 -39
- package/src/blockchain-ecosystem.yaml +1 -0
- package/src/brand-library.yaml +525 -14
- package/src/builder-dev-fold.template.test.ts +113 -0
- package/src/builder.yaml +779 -91
- package/src/business-model-catalog-description.test.ts +47 -0
- package/src/business-model-grp.template.test.ts +214 -0
- package/src/business-model.yaml +296 -49
- package/src/catalog-safety.test.ts +198 -0
- package/src/catalog.template-items.test.ts +75 -0
- package/src/catalog.ts +66 -2
- package/src/concept-guard.test.ts +28 -8
- package/src/concept-guard.ts +2 -2
- package/src/content-creation.template.test.ts +52 -0
- package/src/content-creation.yaml +192 -0
- package/src/content-os.edit-loop.template.test.ts +210 -0
- package/src/content-os.publish-due-posts.template.test.ts +261 -0
- package/src/content-os.template.test.ts +349 -0
- package/src/content-os.video-takes.template.test.ts +338 -0
- package/src/content-os.work-a-take.template.test.ts +125 -0
- package/src/content-os.yaml +1873 -39
- package/src/content-studio-retired.template.test.ts +82 -0
- package/src/corpus-flow-validity.test.ts +4 -5
- package/src/crm-absorbs-outreach.template.test.ts +117 -0
- package/src/crm-build-plan.template.test.ts +128 -0
- package/src/crm-lists.template.test.ts +96 -0
- package/src/crm-messages-cadence.template.test.ts +246 -0
- package/src/crm-one-send-door.template.test.ts +65 -0
- package/src/crm.yaml +1563 -181
- package/src/decisions-wave.template.test.ts +186 -0
- package/src/define.ts +146 -17
- package/src/design-to-implementation.template.test.ts +94 -0
- package/src/domain-template-type.test.ts +75 -0
- package/src/ecosystem.yaml +27 -66
- package/src/enterprise-os.yaml +10 -134
- package/src/facecam-edit.audio-studio.test.ts +188 -0
- package/src/fal-generate-image.test.ts +200 -0
- package/src/fal-media-lab-pod-files.test.ts +180 -0
- package/src/finance.yaml +254 -1
- package/src/foundation.yaml +78 -38
- package/src/frame-host-modules.d.mts +6 -0
- package/src/frame-host-modules.mjs +58 -0
- package/src/generate.mjs +9 -3
- package/src/github-merge.test.ts +210 -0
- package/src/grants.yaml +46 -17
- package/src/hr.yaml +39 -6
- package/src/index.ts +36 -1
- package/src/intent.test.ts +161 -0
- package/src/internal-runbook.yaml +19 -1
- package/src/jev.test.ts +356 -0
- package/src/legal.yaml +33 -1
- package/src/life-os.yaml +51 -240
- package/src/lifecycle-coverage.test.ts +124 -0
- package/src/lifecycle-declarations.test.ts +252 -0
- package/src/lifecycle-presets.test.ts +468 -0
- package/src/lifecycle-presets.ts +494 -0
- package/src/lifecycle-stuck.test.ts +46 -0
- package/src/lifecycle-waits.parity.test.ts +319 -0
- package/src/marketing.yaml +108 -4
- package/src/meetings-knowledge.yaml +18 -0
- package/src/networking.yaml +23 -2
- package/src/operations.yaml +304 -4
- package/src/pipeline-views.template.test.ts +88 -0
- package/src/playbook-goal-placeholders.test.ts +57 -0
- package/src/postiz-contract.test.ts +134 -0
- package/src/presentation-declarations.test.ts +174 -0
- package/src/process-contract.validate.test.ts +352 -0
- package/src/project-management.yaml +39 -740
- package/src/publish-body.d.mts +29 -0
- package/src/publish-body.mjs +74 -0
- package/src/publish-body.test.ts +74 -0
- package/src/publish-official-lib.test.ts +176 -0
- package/src/replicate-rvm.test.ts +504 -0
- package/src/research-base.yaml +119 -20
- package/src/research-decision.yaml +60 -3
- package/src/reserved-profile-slugs.test.ts +81 -0
- package/src/retired-goal-kinds.test.ts +52 -0
- package/src/role-reference-and-step-domain.test.ts +192 -0
- package/src/seed-obligation.test.ts +1 -6
- package/src/send-message-maps.test.ts +227 -0
- package/src/shared-role-ssot.test.ts +40 -2
- package/src/ship-a-change.template.test.ts +177 -0
- package/src/skills.test.ts +170 -0
- package/src/social.yaml +85 -27
- package/src/space-packages.freshness.test.ts +97 -0
- package/src/space-packages.generated.ts +40 -0
- package/src/space-packages.test.ts +125 -0
- package/src/space-packages.ts +73 -0
- package/src/start.test.ts +188 -0
- package/src/stripe-capability.test.ts +192 -0
- package/src/task-intents.test.ts +293 -0
- package/src/template-documents.test.ts +158 -0
- package/src/templates.ts +20907 -21464
- package/src/types.ts +475 -61
- package/src/unipile-linkedin-find-profile.test.ts +183 -0
- package/src/unipile-publish-post.test.ts +162 -0
- package/src/validate-flow.drift.test.ts +2 -3
- package/src/validate-flow.ts +22 -2
- package/src/validate-onboarding.test.ts +59 -0
- package/src/validate.test.ts +71 -4
- package/src/validate.ts +1416 -7
- package/src/wire-core.ts +231 -0
- package/src/wire.test.ts +159 -0
- package/src/wire.ts +107 -0
- package/views/bookmark-views-pack.view.json +39 -0
- package/views/event-views-pack.view.json +45 -0
- package/views/task-views-pack.view.json +53 -0
- package/src/agent-fleet.yaml +0 -1645
- package/src/business-developer.template.test.ts +0 -351
- package/src/business-developer.yaml +0 -860
- package/src/content-studio.yaml +0 -361
- package/src/dev-dashboard.yaml +0 -990
- package/src/outreach-comms.yaml +0 -486
- package/src/the-arch.yaml +0 -201
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Templates carry documents (`documents[]` + sidebar items
|
|
3
|
+
* `{kind: "document", documentSlug}`, plan 9ad4b2fc §5 lane 12). The pod
|
|
4
|
+
* installs them with the views (synap-backend `utils/template-documents.ts`);
|
|
5
|
+
* this file pins the authoring half:
|
|
6
|
+
*
|
|
7
|
+
* (1) the catalog schema accepts `documents[]` and refuses an unknown key in one;
|
|
8
|
+
* (2) both converters carry the documents verbatim, and a template WITHOUT
|
|
9
|
+
* documents compiles to a definition with no `documents` key (so every
|
|
10
|
+
* shipped template's body and content hash stay what they were);
|
|
11
|
+
* (3) `validateTemplate` refuses a bad slug, a duplicate slug, a missing
|
|
12
|
+
* title, an unknown scope, and a document sidebar item naming a document
|
|
13
|
+
* neither the template nor a base it COMPOSES onto declares (a `require`
|
|
14
|
+
* base keeps its own space, so its documents are not reachable);
|
|
15
|
+
* (4) no shipped template declares documents while the control plane's
|
|
16
|
+
* publish door cannot carry them (it strips `documents` and refuses a
|
|
17
|
+
* `kind: "document"` sidebar item): the set is derived from `src/*.yaml`.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
import { describe, expect, it } from "vitest";
|
|
23
|
+
import { workspaceSpecSchema } from "../schema/workspace.ts";
|
|
24
|
+
import { toPackageDefinition, toWorkspaceDefinition } from "./define.ts";
|
|
25
|
+
import { readYamlTemplates } from "./generate.mjs";
|
|
26
|
+
import type { WorkspaceYaml } from "./types.ts";
|
|
27
|
+
import { validateTemplate } from "./validate.ts";
|
|
28
|
+
|
|
29
|
+
const base = (overrides: Partial<WorkspaceYaml> = {}): WorkspaceYaml =>
|
|
30
|
+
({
|
|
31
|
+
meta: {
|
|
32
|
+
slug: "docs-demo",
|
|
33
|
+
name: "Docs demo",
|
|
34
|
+
description: "d",
|
|
35
|
+
icon: "x",
|
|
36
|
+
color: "violet",
|
|
37
|
+
},
|
|
38
|
+
workspace: { name: "Docs demo", description: "d" },
|
|
39
|
+
profiles: [{ slug: "gadget", displayName: "Gadget", properties: [] }],
|
|
40
|
+
...overrides,
|
|
41
|
+
}) as WorkspaceYaml;
|
|
42
|
+
|
|
43
|
+
const DOCS = [
|
|
44
|
+
{
|
|
45
|
+
slug: "space-home",
|
|
46
|
+
title: "Space home",
|
|
47
|
+
content: 'Welcome.\n\n::synap-cell{cellKey="lens-section"}',
|
|
48
|
+
scope: "space" as const,
|
|
49
|
+
},
|
|
50
|
+
{ slug: "notes", title: "Notes", content: "" },
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const withDocs = base({
|
|
54
|
+
documents: DOCS,
|
|
55
|
+
layout: {
|
|
56
|
+
sidebarItems: [{ kind: "document", documentSlug: "space-home", label: "Home" }],
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const rules = (tpl: WorkspaceYaml, opts = {}) =>
|
|
61
|
+
validateTemplate(tpl, opts).errors.map((e) => e.rule);
|
|
62
|
+
|
|
63
|
+
describe("templates carry documents", () => {
|
|
64
|
+
it("(1) the catalog schema accepts documents[] and refuses an unknown key in one", () => {
|
|
65
|
+
const { meta: _meta, ...spec } = withDocs;
|
|
66
|
+
expect(workspaceSpecSchema.safeParse(spec).success).toBe(true);
|
|
67
|
+
const bad = { ...spec, documents: [{ ...DOCS[1], body: "typo" }] };
|
|
68
|
+
expect(workspaceSpecSchema.safeParse(bad).success).toBe(false);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("(2) both converters carry the documents; a template without any emits no key", () => {
|
|
72
|
+
expect(toPackageDefinition(withDocs).documents).toEqual(DOCS);
|
|
73
|
+
expect(toWorkspaceDefinition(withDocs).definition.documents).toEqual(DOCS);
|
|
74
|
+
expect(toPackageDefinition(withDocs).layoutConfig?.sidebarItems).toEqual([
|
|
75
|
+
{ kind: "document", documentSlug: "space-home", label: "Home" },
|
|
76
|
+
]);
|
|
77
|
+
expect("documents" in toPackageDefinition(base())).toBe(false);
|
|
78
|
+
expect("documents" in toWorkspaceDefinition(base()).definition).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("(3a) a clean template with documents validates", () => {
|
|
82
|
+
const r = validateTemplate(withDocs, {});
|
|
83
|
+
expect(r, JSON.stringify(r.errors)).toEqual({ ok: true, errors: [] });
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("(3b) each document rule fires", () => {
|
|
87
|
+
expect(rules(base({ documents: [{ ...DOCS[1], slug: "Not Kebab" }] }))).toContain(
|
|
88
|
+
"document-slug-invalid"
|
|
89
|
+
);
|
|
90
|
+
expect(rules(base({ documents: [DOCS[1], { ...DOCS[1], title: "Again" }] }))).toContain(
|
|
91
|
+
"document-slug-duplicate"
|
|
92
|
+
);
|
|
93
|
+
expect(rules(base({ documents: [{ ...DOCS[1], title: " " }] }))).toContain(
|
|
94
|
+
"document-title-required"
|
|
95
|
+
);
|
|
96
|
+
expect(
|
|
97
|
+
rules(base({ documents: [{ ...DOCS[1], scope: "project" as never }] }))
|
|
98
|
+
).toContain("document-scope-unknown");
|
|
99
|
+
expect(
|
|
100
|
+
rules(
|
|
101
|
+
base({
|
|
102
|
+
documents: DOCS,
|
|
103
|
+
layout: { sidebarItems: [{ kind: "document", documentSlug: "missing" }] },
|
|
104
|
+
})
|
|
105
|
+
)
|
|
106
|
+
).toContain("sidebar-document-unknown");
|
|
107
|
+
expect(
|
|
108
|
+
rules(base({ layout: { sidebarItems: [{ kind: "document" }] } }))
|
|
109
|
+
).toContain("sidebar-document-unknown");
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("(3c) an overlay may name a document of a base it composes onto, not of one it requires", () => {
|
|
113
|
+
const baseTpl = base({ documents: DOCS });
|
|
114
|
+
const overlay = (relation: "compose" | "require") =>
|
|
115
|
+
base({
|
|
116
|
+
meta: { ...base().meta, slug: "docs-overlay" },
|
|
117
|
+
dependencies: [{ slug: "docs-demo", relation }],
|
|
118
|
+
layout: { sidebarItems: [{ kind: "document", documentSlug: "notes" }] },
|
|
119
|
+
});
|
|
120
|
+
const resolveDep = (slug: string) => (slug === "docs-demo" ? baseTpl : undefined);
|
|
121
|
+
expect(rules(overlay("compose"), { resolveDep })).not.toContain(
|
|
122
|
+
"sidebar-document-unknown"
|
|
123
|
+
);
|
|
124
|
+
expect(rules(overlay("require"), { resolveDep })).toContain(
|
|
125
|
+
"sidebar-document-unknown"
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it("(4) no shipped template declares documents while the CP publish door cannot carry them", () => {
|
|
130
|
+
const yamls = readYamlTemplates() as Array<{ file: string; data: WorkspaceYaml }>;
|
|
131
|
+
expect(yamls.length).toBeGreaterThanOrEqual(25);
|
|
132
|
+
const declaring = yamls
|
|
133
|
+
.filter(
|
|
134
|
+
({ data }) =>
|
|
135
|
+
(data.documents?.length ?? 0) > 0 ||
|
|
136
|
+
(data.layout?.sidebarItems ?? []).some((i) => i.kind === "document")
|
|
137
|
+
)
|
|
138
|
+
.map(({ file }) => file);
|
|
139
|
+
if (declaring.length === 0) return;
|
|
140
|
+
// A template uses them: the CP's packageDefinitionSchema must slot both.
|
|
141
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
142
|
+
const cpPackages = join(here, "../../../../synap-control-plane-api/src/routes/packages.ts");
|
|
143
|
+
expect(existsSync(cpPackages), `${declaring.join(", ")} declare documents; ${cpPackages} is needed to check the CP carries them`).toBe(true);
|
|
144
|
+
const src = readFileSync(cpPackages, "utf8");
|
|
145
|
+
const start = src.indexOf("export const packageDefinitionSchema = z.object(");
|
|
146
|
+
expect(start).toBeGreaterThan(-1);
|
|
147
|
+
const body = src.slice(start, src.indexOf("\n});", start));
|
|
148
|
+
expect(body, `${declaring.join(", ")} declare documents, which the CP publish door strips`).toMatch(/\n documents:/);
|
|
149
|
+
// The sidebar ITEM's kind enum is the one listing "profile" (the nested
|
|
150
|
+
// `surface` enum already lists "document"; it is not the item's kind).
|
|
151
|
+
const itemKinds = [...body.matchAll(/kind: z\.enum\(\[([^\]]*)\]\)/g)]
|
|
152
|
+
.map((m) => m[1]!)
|
|
153
|
+
.filter((list) => list.includes('"profile"'));
|
|
154
|
+
expect(itemKinds.length, "the CP sidebar item kind enum was not found").toBeGreaterThan(0);
|
|
155
|
+
for (const list of itemKinds)
|
|
156
|
+
expect(list, `${declaring.join(", ")} name a document sidebar item, which the CP publish door refuses`).toContain('"document"');
|
|
157
|
+
});
|
|
158
|
+
});
|