Contracts
doctor-doctrine-json.md
Contract: doctor doctrine --json additive keys (under profile_health.org_drg)
All keys are additive. The frozen top-level profile_health key set (#5729) is unchanged. None of these keys is emitted when no org packs are configured (FR-012).
| Key | When present | Shape |
|---|
unsanctioned_overrides | existing; non-empty only | [{urn, kind, why, legacy_template?: {path, reason}}] |
sanctioned_overrides | NEW; non-empty only | `[{urn, kind, pack, source: "consumer"\ |
pack_sanction_errors | NEW; non-empty only | [str]. Each message is also appended to errors, which drives RC=1. |
replaceable-builtins-file.md
Contract: replaceable-builtins.yaml (consumer and pack)
| Location | Keys honoured | Owner |
|---|
<repo>/.kittify/doctrine/replaceable-builtins.yaml | replaceable_builtins, revoked_pack_sanctions | consumer |
<org pack root>/replaceable-builtins.yaml | replaceable_builtins only | org-pack author |
- Entry grammar:
{urn: <kind>:<id>, reason: <str>}. reason is required and must be non-empty when <kind> is directive. - Pack scope: a pack entry is effective only for an override whose surviving node has provenance
org:<registry name of that pack>. - Compatibility: CLIs that predate this contract ignore the pack file and the
revoked_pack_sanctions key. - Transitional:
<pack root>/templates/setup/replaceable-builtins.yaml is never a sanction. Doctor reads it only to print remediation hints, and the read goes away with #2594.