Kestrel Fastening Systems KESTREL FASTENING SYSTEMS

Integration hooks

Say plainly that this baseline ships no integration, name the one scheduled task it does ship, and route the reader to the right skill before they invent a connector.

What the baseline guarantees

NOTHING integration-shaped ships in this composition. Zero integration activities, zero
endpoints, zero providers, zero job files, zero field-value conversion rules.
The only scheduled task any layer ships: feature-subscription-orders 1.1.1 writes ONE
ScheduledTask row, "Place recurring orders", bound to the DW-native
RecurringOrdersScheduledTask add-in, ** TaskEnabled = false **. DW registers the add-in TYPE
only; the row is layer-owned. Enable it to demo renewals.
The load-bearing architectural rule, before anyone models one: in DW10 an ERP is a SOURCE and
a TARGET in the Integration Framework. It is never a `ShopType=3` channel and never an
`EcomFeed`. Modelling it as a channel produces a demo that cannot show the thing the customer
is buying. Assert the rule as part of the gate: ZERO EcomShops rows and ZERO EcomFeed rows
for the ERP.
Three flavours exist (dw-demo-erp/SKILL.md:62 — note its own frontmatter says two):
a DB-staged one-direction mock (post-sync state pre-staged in the database plus a built-in
RESET scheduled task, no JSON files on disk), a two-directional mock built from four shipped
provider activities, and a live Business Central connector. Pick before building; they share
almost nothing.
One measured trap that will otherwise eat an hour: RunSqlScheduledTaskAddIn reports success
and silence identically. Never treat its run result as evidence — assert the effect.

Which skill covers it

dw-demo-erp (dynamo: false) — the owner of the source-AND-target rule and the three flavours.
references/integration-framework.md, references/erp-data-shape.md, references/mock-deltas.md,
references/two-way-mock.md, references/scenarios-first-planning.md.
dw-integration-framework (dynamo: true) — references/job-file-format.md,
references/provider-behaviour.md, references/custom-provider-authoring.md.
dw-integration-erp (dynamo: true, mcp: none) — references/ownership-split.md,
references/feed-keying.md.

Which MCP tools brand it

** Read this before planning tool calls. ** dw-integration-framework prescribes, in order
(SKILL.md:144-174):
  save_integration_endpoint -> test_integration_endpoint
  -> create_integration_activity
  -> get_integration_provider_schema -> save_integration_activity_mapping
  -> run_integration_activity -> get_integration_activity_status
  -> get_integration_activity_logs
  (+ get_integration_providers, get_integration_provider_parameters,
     get_integration_activities, get_integration_activity, get_integration_activity_mappings,
     get_integration_endpoints, schedule_integration_activity)
** None of those 15 tools exists in the Dynamicweb MCP add-in 0.4.4 tool set on this site. **
There is no tool whose name matches /integration/ at all. The MCP-expressible neighbours are:
  create_or_update_feeds, get_feeds, get_feed_providers, get_feed_queries   (outbound feeds)
  save_field_value_conversion_rules, get_field_value_conversions            (mapping tables)
  create_datasets / patch_datasets                                          (staged data)
Everything else is the admin UI (Settings > Integration > Activities) or the Management API.
Per the dynamo rule dw-integration-framework itself opens with, the correct move is to STOP
and name the admin screen — not to substitute a guessed HTTP call.
Job files are served anonymously and can carry credentials in <Password> elements. An install
destined for anything beyond a demo asserts zero occurrences of `Password=` under the decoded
job folder.

Verify

MCP: the tool list contains no name matching /integration/. Confirm with ToolSearch before
promising an integration beat.
For the shipped task: assert TaskName "Place recurring orders" with TaskEnabled false on a
clean baseline. There is no MCP read for ScheduledTask; that check is an admin-screen or SQL
read, which is itself the finding.
If an activity IS later built: never claim a run succeeded from a queued result. The log is
the evidence. And verify the ARTEFACT — the destination row count or the rendered page — not
the exit line: "Job succeeded" proves rows were processed, not that the effect exists.