Good policy inheritance in an SCA tool means the organization sets defaults, business units and teams can tighten them, and any loosening is explicit, approved and visible. A child scope should never silently weaken a parent rule. Test this with a scenario before you sign, not with a slide.
What inheritance has to solve
A company with 400 repositories cannot maintain 400 separate policies. It also cannot run one policy for everyone, because a payments service and an internal wiki do not carry the same risk. Inheritance is the compromise: one baseline, local adjustments, and a clear way to see what applies where.
Without it, two things happen. Teams copy a policy once and it drifts. Or the central team becomes a ticket queue for every threshold change.
The model to look for
Think in three layers.
| Layer | Owns | Typical content |
|---|---|---|
| Organization | Security leadership | Blocking severity, banned licenses, minimum evidence |
| Business unit | Unit security lead | Stricter thresholds for regulated products |
| Team or repo | Engineering team | Allowed exceptions with expiry, local ignore paths |
The rule that matters is direction. A lower layer may tighten without asking. Loosening should need approval from the layer above and leave a record.
Source control platforms already show this pattern. GitHub organization rulesets apply to repositories across an organization, anyone with read access to a repository can see which rulesets apply to it, and the rule insights dashboard can show which repositories bypass them most often (see Sources). That is a reasonable bar for visibility: a developer should be able to answer "why did my build fail" without asking the security team.
Five scenario tests for a vendor demo
- Tighten locally. Ask them to raise the blocking severity for one unit. Does it take effect without touching the org policy?
- Try to loosen locally. Ask a team admin to lower a threshold below the org default. The tool should refuse or route it for approval.
- Change the parent. Raise a rule at org level. Do all children pick it up on the next scan, and does the tool tell you which repos would newly fail before you commit?
- Move a repo. Transfer a repo between units. Does its effective policy change with it?
- Explain a result. Open a failed check and ask for the effective policy and where each rule came from.
If the answer to the fifth is "check three screens," expect support tickets.
Dry run before enforcement
A parent change at scale is a blast radius question. Ask whether a new rule can run in an evaluate only state that reports what would fail without blocking. GitHub rulesets can be disabled without deletion and exported as JSON to move between repositories or organizations, which shows the shape of the workflow: draft, observe, enforce, and keep policy as a file you can review.
Policy as data, not clicks
Ask whether policy can be exported, versioned and reviewed. A policy that lives only in a settings page has no history and no peer review. Even a simple export lets you diff changes and attach them to a change ticket for audit.
Common traps
- Exceptions that inherit down forever. They should expire.
- Per repository overrides that nobody reviews. Ask for a report of every override.
- Group nesting that is only two levels deep when your org chart is four.
Safeguard provides policies, gates and guardrails for dependency scanning and SBOM work, and you can try a free scan at gold.safeguard.sh/scan to see how findings and gates look on your own code.
Try it yourself
Click through it at your own pace, or open it full screen.
Watch which rule blocks the change, and ask whether your candidate tool tells you that as clearly.
Quick check
Should every team be allowed to set its own policy?
Teams can tighten, and can request exceptions with an expiry. Loosening the baseline should need approval from the layer above.
How do I know a policy change will not break every build?
Look for a dry run that lists which repositories would newly fail, before enforcement starts.
Sources
Last reviewed: 19 October 2026.