Skip to content

Stable Build v0.8.0

Choose a tag to compare

@modesty modesty released this 08 Oct 00:48
· 6 commits to master since this release
1bfde2b

v0.8.0 — Upgrade to Fluent SDK v4.13.6

ServiceNow SDK v4.13.6

Bumped @servicenow/sdk 4.11.2 → 4.13.6. This release covers everything shipped across 4.12.0–4.13.6.
Only 4.12.0 and 4.13.0 published release notes, and 4.13.1, 4.13.2, 4.13.4 and 4.13.5 were never published
to npm. The surface was therefore established by diffing the installed package (types, build plugins, CLI
flag declarations) against 4.11.2.

Four new metadata types (75 total):

  • assessment — Assessment() defines an assessment or survey with its categories, metrics, and
    metric definitions. A scored assessment also writes its scoring business rules, and a scheduled one writes
    a sys_trigger job that ships inactive.
  • risk-assessment — RiskAssessment() defines a change risk assessment with categories, metrics,
    and thresholds. It requires the Change Risk Assessment plugin, which the build cannot check.
  • database-view — DatabaseView() joins existing tables into a read-only reportable view. name is
    the identity (no top-level $id) and needs the u_ (global) or <scope>_ (x_ scope) prefix.
  • interceptor — Interceptor() defines a guided-question wizard (sys_wizard +
    sys_wizard_answer). It appears in no upstream release note.

Existing types updated across specs, instructions, and snippets:

  • Playbook — variants, GoBack, isIdealPath, actionOverrides, publicAccess, and
    automationPlan(). Potentially breaking: NewRecordForm.table and ChecklistTask.checklist_items
    are now mandatory, and interface … extends BaseActivityConfig fails with TS2312.
  • Flow — tryCatch / doInParallel outputs are hoisted, endFlow works inside either arm, and the
    old "use setFlowVariables" rule is retired.
  • Table and column — index on augments, allowConfiguration / dbObjectId, relative UrlColumn
    values, and hint / help / plural now reaching sys_documentation.
  • ACL — the aiux_page, aiux_widget and aiux_experience types (they require name) and per-role
    protectionPolicy.
  • UI Action — programmatic-only form / list: true and the 'primary-ai' / 'secondary-ai'
    styles.
  • $meta — now accepted on EmailNotification, UiPolicy, ScriptOnlyCheck, TableCheck,
    CatalogClientScript, CatalogItemRecordProducer, and catalog variables.
  • ATF — optional assert / catalog / category inputs, and atf-server-catalog-item now uses the
    real snake_case names; the old camelCase names never built.
  • Dashboard — fixed long-standing errors: the grid is 48 columns, and data binds inline instead of
    by report sys_id.

MCP tool changes (still 17 tools):

  • cicd_fluent_test gains action: "logs" for a single test result's logs.
  • deploy_fluent_app gains async and a 15-minute budget, because the CLI's async install poll has no
    cap of its own.
  • download_fluent_app and fluent_transform gain timeoutSeconds for the new --timeout (idle
    seconds, CLI default 3600).
  • fluent_transform now rejects flag combinations the CLI forbids before spawning anything: from with
    auth or id, and id or force without table. It also exposes force and format.
  • now-sdk auth --print is deliberately not wrapped, because it would put a live token into model
    context.

Prompts aligned with now-sdk explain and real builds:

  • coding_in_fluent is now TypeScript-first. Server logic goes in TS modules under src/server/
    importing from @servicenow/glide, with JavaScript via Now.include() only as the fallback for
    string-only fields, and ES2021 is the default.
  • Its syntax rules cite the real diagnostics (loops TS250, if TS245, + TS303) and warn that
    .map()-generated records build but are corrupt.
  • get_sys_id(...), which is not an SDK API and fails a real build, is replaced by Now.ref.
  • A bundled UI Page's index.html must be imported. Now.include() there builds successfully but
    ships the unrewritten src="./main.tsx".
  • create_custom_ui now has an endpoint that builds, the React 18.2.0 dependency set, and the clientDir
    / staticContent.paths trap.

Fix: npm run inspect, inspect:dev and inspect:published failed with could not determine executable to run, because @modelcontextprotocol/inspector@2.10.0 ships two executables. The scripts
now pin 2.10.0 and name mcp-inspector.

Corrections to upstream notes and docs, verified against the installed package:

  • The 4.13.0 DatabaseView example does not compile (it fails in six ways).
  • RiskAssessment has no table or evaluationMethod.
  • The string form of displayedWhen / correctAnswerChoice is silently written empty.
  • publicAccess is not a public API.
  • The CLI --timeout default is 3600 s, not 300.
  • transform --table without --id filters local XML and never downloads.
  • Table augments need <scope>_ in every x_ scope, Store apps included, so the earlier advice to use
    u_ for them was wrong.

Dependencies & verification

  • 47 Jest suites / 903 tests green. Build, TypeScript and lint are clean, and 75/75 specs and 75/75
    instructions pass.
  • Every new and changed snippet compiles with now-sdk build on 4.13.6, with 0 unexpected failures.
  • Driven live in the MCP Inspector: 17 tools, 224 resources, a real build_fluent_app, and the corrected
    prompts served.
  • New types (notably interceptor install behavior) are not verified against a live instance; smoke test
    them on a target instance.