The pipeline model
Under the hood, a furnishing policy is a pipeline: an ordered sequence of processing steps that every furnished record runs through. The pipeline for a policy is derived from a product default — a SOLO-maintained template pipeline for the product, identified by the policy’ssource_default_slug
(resolved from the product’s catalogue path when the policy is created).
A policy customizes the default at three levels, which is exactly the surface
the configuration API exposes:
| Configuration | What it controls |
|---|---|
enabled_step_names | Which of the default pipeline’s steps run for this policy. Some steps are mandatory and are always retained, whether or not they are listed. |
step_model_defaults | Per-step default values applied to the models a step processes. |
step_field_configuration | Per-step, per-field settings — the field-level knobs a step exposes. |
The step names and their available settings are product-specific — they come
from the product’s default pipeline. List an existing policy (below) or
consult your SOLO account manager for the step catalogue of the products you
operate.
Policy fields and versioning
| Field | Meaning |
|---|---|
name | Display name. Together with network_id and version, must be unique. |
version | Integer version, starting at 1. New revisions of the same policy increment it. |
schema_version | Version of the pipeline document schema the policy conforms to. |
source_default_slug | Which product default pipeline this policy is derived from. |
active_on | When the policy takes effect. Once set, the policy is immutable. |
deprecated_on | When the policy is retired. Resolution skips deprecated policies. |
policy_metadata | Free-form metadata recorded by the author. |
active_on unset), its configuration can be replaced
freely. Setting active_on freezes it; further configuration writes are
rejected:
name and a
higher version, configure it, and activate it. When SOLO needs “the current
policy named X in network Y”, it picks the highest-version, non-deprecated
one.
A typical revision cycle looks like this:
Because activation freezes a policy, every furnish is reproducible after the
fact: the policy version that processed a record can be read back exactly as
it was when the record came in. Deprecating the old version (rather than
deleting it) keeps that audit trail intact while taking it out of resolution.
How a policy is resolved at furnish time
Resolution is automatic and happens on every furnish. Three inputs drive it — all from the furnish request:Resolve the program
program_name is matched to a program network
under network_id. An unknown program is an error — programs are
introduced ahead of time by the governor.Find the program's assigned policies
Policies are assigned to programs, each assignment carrying an
effective-date window (
effective_from, optional effective_to). Every
non-deprecated policy assigned to the program for the product is a
candidate.Managing policies via the API
Five routes cover the lifecycle. Listing and reading are available to any member of the network; creating and configuring are governor operations.List policies in a network
limit accepts 1–100 (default 20); offset ≥ 0 (default 0). Returns an array:
Read a single policy
network_id query parameter scopes the lookup; a policy that exists but
isn’t visible in that network returns 404 RESOURCE_NOT_FOUND.
Create a policy
POST /v1/networks/policies/furnishing creates an empty policy shell for a
(product, network) pair. The server derives source_default_slug from the
product; pipeline steps are added afterwards via configuration (or workbook
ingestion).
Configure a policy
PUT /v1/networks/policies/furnishing/{policy_id}/configuration replaces the
draft policy’s pipeline configuration. enabled_step_names is required; the
rest is optional.
active_on activates the policy, after which it is immutable; deprecated_on
retires it from resolution.
Bulk authoring and ingestion
Furnishing policies sit at the heart of SOLO’s bulk-ingestion paths:- Policy workbooks. Governors can author policies in bulk by uploading a policy workbook (per product) through file upload or SFTP. Each row clones the product default and applies the row’s step selections — equivalent to the create + configure flow above. Workbook ingestion is rejected when the caller doesn’t govern the target network.
- Program workbooks assign policies (by name, latest non-deprecated version) to the programs they define.
- Data files. Records arriving in bulk — see CSV format and schemas — go through exactly the same resolution and pipeline as API furnishes. There is one set of rules, regardless of transport.
Relationship to other concepts
| Concept | Relationship |
|---|---|
| Querying policies | The read-side counterpart. A product in a network typically has both: a furnishing policy shaping intake, a querying policy capping reads. |
| Entitlement | Furnishing under a policy is what earns a furnisher read access to the subjects it contributed. |
| Networks & programs | Policies belong to a network; assignments bind them to programs. |
| Furnishing | The furnisher-facing view: furnish with network + program + application date, and the policy applies itself. |
Related concepts
Furnishing
The furnisher’s view of the same flow.
Querying Policies
Field-level read rules — the other half of policy governance.
SFTP Ingestion
Bulk delivery of programs, policies, and data.
File Upload
Inline workbook and CSV ingestion.