Repository navigation
Releases
Releases · dynamicweb/skills
6.1.0
dw-demo-basegains a scripted local base build: one command scaffolds a running, unbranded Swift 2 base from
the public release bacpac.scripts/Invoke-DwDemoBaseBuild.ps1, driven by a customer JSON that needs only a slug
and a name, runs resumable gated steps: preflight (with the template, sqlpackage and dev-certificate cheap fixes),
Distribution release resolution with the bacpac SHA256 checked againstlayers/INDEX.json, a net10 Suite-only
scaffold pinned to the gate-proven platform, restore with first-login credential repair, the verified Swift
release Files and ordered edition overlays with the public MCP app staged in AddIns (never a PackageReference),
access keys, start and trial licence, access proof (more than 200 MCP tools before the key is written to
.mcp.json), index rebuild, acceptance and provenance stamps. Environment SQL authentication and the
container-host opt-in are supported. Reference:references/scripted-base-build.md.- The command applies no branding. Palette, typography and button Style pairs, logo and icons, storefront
copy, persona and catalogue renames are the next agent step on the running base, withdw-demo-swiftand its
brand guidance as they stand. A config carrying abrand,storefront,personasorcatalogueblock is
refused with that pointer; the build report, console summary andCUSTOMISATIONS.mdstamp saybranded: false
and name the step. Acceptance checks the unbranded base: readiness, critical pages, three persona identities,
the edition'sdefaultStyle sheets linked and served, named PLP products and resolving images. - API and MCP keys are minted over SQL before the first start (
New-DwDemoAccessKeys.ps1), because MCP 0.6.3
never reveals a created key:AccessUserTokenHashis the prefix plus lowercase hex SHA-512 of<secret>DwSecret,
and a full-accessMcpConfigurationbound throughMcpConfigurationCredentialmust exist at startup.
references/mcp-setup.mdrecords the version boundary.
6.0.0
dw-swift-migrate-sitereplacesdw-swift-migrate-contentas the master site migration. One flow moves any
website or webshop into a Swift 2 site: content pages, and when in scope the product catalog as a PIM data model
with imported products. It opens with an intake that asks, in one message, only what the request leaves open
(source URL, new or existing website, content and/or catalog, language, currency and VAT, permission to copy, and
for a catalog where the API key file is), takes the connected solution, a subset-first scope and six review rounds
as stated defaults, and starts the survey at once when the request answered everything. Then seven steps, each
ending at a checkpoint of one of two kinds: a decision the agent waits on (the scope, the data model, the website
proposal) or a report it posts and continues past, unless the report shows a problem or the user asked to review
every step: survey, scrape, data model, Data Integration import, content rebuild, catalog tuning,
and a screenshot-scored critic review loop, withRUN-STATE.mdso a run resumes in a new session. The content
rebuild of the retired skill (extract_site_content, the per-page layout plan,build_pages) lives on as
references/content-rebuild.md, with two safety rules: the site extraction and media import run only when the
source's owner accepts their load (both read 6 requests at a time and skiprobots.txt), and a product import
first checks that no existing product shares a source product number, because the Ecom provider would update it.
Group membership is imported through the product file'sGroups/PrimaryGroupcolumns.
dw-swift-migrate-siteisdynamo: false(it needs a shell, the dw CLI and a browser), so the manifest no longer carries a site migration skill. The skill is self-contained: it links to no
other skill, carries the page create order, the dw CLI upload rules, the Data Integration activity rules and the
facet field rule itself, and describes steps in plain language, naming MCP tools only where a call has a trap
(the restricted migration tool family and the page create order). Registered indynamicweb-frontendand
dynamicweb-commerce; routing indw-swift-migrate-v1,dw-swift-page-design,dw-swift-building,
dw-demo-swiftanddw-demo-basenow points at it.
5.8.13
- Variant prices: the master's variant-less row is the conflict, not a lost price. Combine as variants
moves the absorbed products' price rows onto the master, scoped to each combination; a variant shows the
master price because a variant-less row applies to every variant and the lowest wins. Priority is not the
fix: keep no variant-less row below a variant's price.dw-pim-modellingstructural-model.md,
dw-data-accessrecipes-pim.md. - Variant rows are writable from MCP 0.6.3-BETA.
patch_products_safewithvariantIdwrites fields
that allow variant editing and refuses the others; the "no API writes a variant row" finding is now
scoped to older MCP versions. Same files. dw-pim-modelling: a sparse variant matrix strands the shopper. Swift's selector crosses out
missing combinations and cannot jump to an existing one; keep families to options that combine fully.dw-search-indexingindex-management.md: gate a product build on a movedlastBuildStarted, and
purge deleted pages before rebuilding the Content index, which otherwise keeps indexing them.dw-swift-page-blocks: the site container width is the Master fieldMediaQueryLimit;SearchField
on a dark scheme is invisible;ProductComponentSliderhas no title and an empty slider strands its heading.dw-extend-mcp-toolstool-surface-gaps.md:delete_variant_combinationsleaves the combination's
price rows behind.
5.8.12
- Combine as variants: the empty master number is by design; the completion-rule gap is work item 29782.
Dynamicweb support (2026-10-14, dynamicweb/DynamicWeb#735): the master's source product is copied onto a
variant of its own, so the master keeps no number. With Number master-only the variants share the master's
number, so make Number editable on variants before combining when they need their own. A completion rule
that listsProductNumberstill cannot pass on a master with variants until work item 29782 ships; keep it
out.dw-pim-completenessSKILL.md andrules-and-dashboards.md,dw-pim-modellingstructural-model.md.
5.8.11
dw-swift-page-design+dw-swift-page-blocks: on-topic imagery or none. Use only images whose
subject fits the section; the site's own brand or product photos are off-topic when the page is about
something else. When nothing fits, leave the slot empty, compose the section from image-free components
(Feature/icon rows,Textin banded rows), and tell the user which sections need images. Replaces
"assign a real image to every slot, never leave one blank", which forced unrelated photos onto pages.dw-swift-page-design: a per-write approval is the confirmation. When the client gates each write
behind its own approval step, put the plan in the reply and proceed; do not stop to ask for a go-ahead
or placement.dw-swift-page-designMode A: "based on page Y" reconstructs. It builds a new page with Y's section
rhythm and never edits or removes anything on Y;copy_pageis only for an explicit duplicate.
5.8.10
dw-commerce-catalogcatalog-publishing.md: three feed Template-provider context traps. The
Dynamicweb.Ecommerce.Context:LanguageIDmacro in a feed query resolves the default language while option
names render in the feed language; a NULLDoublecustom field reaches the template as0; the feed
context currency reads USD for a EUR feed. Take language, emptiness and currency from the product data.dw-integration-frameworkRules: the full-path source rule covers the CSV provider too, which reads
nothing with the folder and file split.get_integration_activity_logsanswers "No run log found" for an
activity inside a group, andget_scheduled_taskslists no sub-tasks.dw-extend-scheduled-tasksscheduler-rows-and-runs.md: reading sub-tasks.get_scheduled_tasks
lists only the parent level; read the whole tree fromScheduledTaskon a local install.
5.8.9
dw-demo-pimscreen-authoring.md: one layout, one tab per product type. A tab whose editors the
product lacks is not rendered, so oneProductEditScreenlayout with a tab per category shows each
product type its own tab. Unplaced editors go to theIsCatchAllgroup and vanish silently without one;
group names must be unique across the layout. Saves renumberOrder,ScreenLayoutDeletecascades,
writes apply on the next load.dw-demo-pimscreen-authoring.md: query list presets render headers but blank cells. Row data comes
from the user's own defaultProductListScreenpreset, not the query'sListScreenViewPresetId; give each
worklist user a default list preset covering every query column (platform defect, DW 10.29.6).- Translation worklist that opens side by side. Query edit-screen languages plus Open product in edit
mode open Multi Edit; the hiddenProductQueryListWidgetis added by system name and has product-aware
rows. Recipe indw-demo-pimlocalization.md, widget row indw-pim-completenessrules-and-dashboards.md.
5.8.8
dw-pim-completeness: per-language completeness works with the "Completeness feature" flag on.
The "no per-language dimension" claim is scoped to the flag-off path. Measured on DW 10.29.6, the flag-on
index builder writesCompletionRule|<id>per index document, scored in that document's language, and a
LanguageID+ emptyVariantID+CompletionRule|<id> < 100query lists one language's gaps. Recipe,
copy-fields-only rule, and the admin per-language badge are inrules-and-dashboards.md; the "buggy beta"
warning is narrowed to DW 10.28.dw-pim-localizationanddw-users-permissionsfollow.dw-pim-completeness: whatcalculate_product_completeness_for_productsreturns. A family-aggregate
value per master,fieldStatusesfor the master row only, andlanguageIdsignored. The default-image
index fields are empty on every document; onlyImageSmalldrives a missing-image query.- Masters with variants and
ProductNumber. Combine stores the master number as an empty string and the
master edit screen has no Number field, so keepProductNumberout of completion rules (DW 10.29.7,
dynamicweb/DynamicWeb#735). "Exclude variants" still counts the variants' Number; variant-editable category
fields are checked per variant.dw-pim-modellingstructural-model.mdadds the combine side effects and
two variant-field traps;dw-pim-workflownotesexcludeVariants. assign_completion_rules_to_shopspersists only the last request of a batch (MCP 0.6.0-BETA). Call it
once per shop and read the assignment back; row added todw-extend-mcp-toolstool-surface-gaps.md.
5.8.7
dw-render-viewmodelsviewmodel-traps.md: the "no picture" fallback hides a null
DefaultImage. WithEcom/Picture/NoPictureset, an image-less product renders the fallback image
and an unguarded template never fails, so a crash reproduction or a sweep proof must blank the
fallback for the run. The fallback also covers unguarded templates until they are fixed.
5.8.6
dw-demo-foGet-FoErrorTextis safe under strict mode. A 404 with no response body (no
ErrorDetails) threw "The property 'Message' cannot be found" inside the caller's catch block, so
Import-GoldenPackage.ps1stopped before it created a missing import project. Every error shape now
falls back to the body text or the exception message. New hermetic suitetests/Fo.Api.Tests.ps1.dw-demo-pimcanonical-setup-order.mdstep 8:delete_groupsmeasured. It deletes no
products, in one group or in two; it leaves the group's product relations and shop relation behind
as orphans, and a group recreated with the same id picks them up. Step 10: readstockStatusback,
since the create response echoesneverOutOfStockwrongly.dw-demo-swiftcheat-sheet.mdnavigation table.save_pages {showInMenu:false}writes
PageActive, the same column asset_page_menu, and no MCP tool in the 0.6.0 or 0.6.1 add-in
source writesPageShowInLegend;PageSavestays the only call that hides a page and keeps it
published.