SDLCProfile
The kind that binds a component to its stages, playbooks, packs, toolchains, adapters, autonomy, residency and budgets, with field reference and merge rules.
The schema and loader checks are public. Resolution of org, repo and component profiles into one effective profile is a proprietary engine feature.
Purpose and scopes
An SDLCProfile is the join table of the configuration. Other kinds are referenced by name (stages, playbooks, packs, toolchains, knowledge connections); adapters, autonomy, residency and budgets are inline. A profile can be written at SCOPE_ORG, SCOPE_REPO or SCOPE_COMPONENT. An absent field is unset and comes from a wider scope.
A policy-bearing field has authority only when the profile is loaded from a protected path or a signed policy bundle. Any other copy, even one claiming SCOPE_ORG, is RepositoryAuthored and has no authority.
Field reference
Prop
Type
The envelope (apiVersion, kind, metadata, extensions) is described in Configuration. The loader also requires that playbooks, control_packs, architecture_packs and toolchains have no duplicate element, and that each name and each adapter provider, instance and knowledge name is made of /-joined ASCII segments.
Example: organization baseline
apiVersion: numinance.dev/v1
kind: SDLCProfile
metadata: {name: org-baseline, scope: SCOPE_ORG}
spec:
stages: trunk-with-cab
control_packs: [controls/payments/pci-dss/4.0.1]
autonomy:
defaults: {level: AUTONOMY_LEVEL_PR}
rules:
- {match: {playbook: dependency-upgrade, risk: RISK_CLASS_LOW}, level: AUTONOMY_LEVEL_MERGE}
residency: {floors: {floor: RESIDENCY_CLASS_IN_ACCOUNT}, regions: [eu-central-1], cross_region: false}
budgets: {tokens: 400000, wall_clock: 7200s, tool_calls: 300, files_changed: 40}This is the only place the org picks the stage registry, applies a control pack, sets residency and fixes budgets. Everything below it can only add.
Example: component profile
apiVersion: numinance.dev/v1
kind: SDLCProfile
metadata: {name: payments-api, scope: SCOPE_COMPONENT}
spec:
playbooks: [dependency-upgrade, bugfix-bounded, runtime-eol-upgrade]
architecture_packs: [layered-service]
toolchains: [go-1.27]
adapters:
scm: {provider: dev.numinance.official/github, instance: main}
ciexecutor: {provider: dev.numinance.official/jenkins, instance: ci-prod}
knowledge: [confluence-eng, jira-pay]$ numi validate --files schemas/examples/SDLCProfile
revision: "files"
ok file "org-baseline.yaml" SDLCProfile "org-baseline"
ok file "payments-api.yaml" SDLCProfile "payments-api"The component profile sets no stages, control_packs, residency or budgets. They come from the org profile.
Merge and resolution semantics
| Field | Behaviour across org, repo, component |
|---|---|
stages | Org only (FORBID). |
playbooks, control_packs, architecture_packs, toolchains | APPEND: wider names first, then the narrower scope's names not already present. Nothing can be removed. |
adapters | Per port, REPLACE as a unit; a provider is never paired with another scope's instance. |
autonomy | Layered after the same scope's AutonomyPolicy. Rules of a narrower scope replace the wider list. Floors are FORBID and cannot be lowered. |
residency, budgets | Org only for floors, limits and required regions. |
A repository that asks for an ungranted playbook, toolchain or adapter name gets it recorded as ignored (outside the org-granted set) and not applied.
Security implications
- A repo cannot pick its own gates:
stagesis org-only. - A repo cannot drop a compliance pack:
control_packsonly appends. - A repo cannot raise budgets or relax residency: both are org-only.
- Adapter bindings only name providers. They do not grant credentials; the credential broker issues material per step.
Common misconfigurations
$ numi validate --files stages-repo.yaml
revision: "files"
invalid file "stages-repo.yaml": kind: invalid: numinance.kinds.v1.SDLCProfileSpec.stages is set only at the org scopeAn unknown key such as extras is rejected with "/spec/extras": additionalProperties and exit 3.
What validation checks, and what it does not
The open build checks keys, enums, duration form, uniqueness and the org-only rules. It does not check that stages names an existing StageRegistry, that a playbook exists, that a provider is installed, or that the merged result satisfies the floors. Ordinary numi validate on a repository passes the schema and then exits 7: profile resolution needs the Numinance engine build.
Next steps
Layout and scopes
Where .numinance/ files live, which path is protected, how the strict schema and the extensions escape hatch work, and the size and symlink limits the loader enforces.
AutonomyPolicy
Set the autonomy level per playbook, risk class and environment, under org floors that no rule, default or narrower scope can exceed.