---
id: TST-PFM-DJE-189
title: Package manifest
kind: unit
product_area: platform
module: data-job-engine
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-platform
files:
  - modules/data-jobs/tests/unit/package-manifest.spec.ts
implements:
  - ATS-PFM-DJE-016-04
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: In-memory fixtures and restored dependency doubles.
evidence:
  - 'services-platform:modules/data-jobs/tests/unit/package-manifest.spec.ts'
assertion_inventory:
  - 'migration packages: reading a manifest'
  - 'reads the package, its source, its destination and its purpose'
  - 'reads every field of a dataset, and an absent dependsOn as no edges'
  - reads a package that carries no options at all as a package with the default purpose
  - refuses a package of a format version this engine does not read
  - refuses bytes that are not a JSON object
  - refuses a package that names no dataset
  - 'refuses a package of more datasets than a package may carry, naming the limit and the count'
  - refuses a dataset whose digest is not a SHA-256
  - refuses a dataset whose record count is not a whole number
  - refuses an operation the engine does not have
  - refuses a format the engine does not read
  - refuses a purpose Platform does not run a package for
  - 'refuses the same dataset id twice, because every edge and every step names one'
  - refuses a dependsOn that is not a list of dataset ids
  - 'refuses a package with no destination tenant, naming the field rather than the value'
  - 'migration packages: ordering the datasets'
  - puts a dataset that waits for nothing in the first wave
  - 'puts a chain in one dataset per wave, in the order the edges say'
  - 'puts two datasets with no edge between them in the same wave, so both may run at once'
  - 'orders a diamond by its longest path, so a dataset never runs before something it waits for'
  - 'refuses an edge to a dataset the package does not contain, naming both'
  - refuses a dataset that depends on itself
  - 'refuses a cycle of two datasets, naming the datasets in it'
  - 'names only the datasets in the cycle, not the ones it could order'
registration_note: Registration describes existing source; the suite is not executed by this documentation job.
---

# Package manifest

## Verification Boundary

The suite checks an isolated production calculation, declaration or adapter. The structured assertion inventory records the checks present at the pinned revision.

## What This Suite Proves

The existing checks exercise package manifest. The specification bindings identify the narrower outcomes supported by those assertions.

## What It Does Not Prove

An isolated check does not establish a deployed workflow, database enforcement or complete feature acceptance.

## Real Dependencies and Test Doubles

The production function or declaration is exercised with in-memory inputs and dependency doubles. This boundary does not require a live database.

## Must Not Be Doubled

The production function under examination and its returned decisions remain real; replacing their answers defeats the check.
