01 · Write it down
One file, two halves.
POLICY.md sits at the root of the repository, next to
your README. The header block holds settings the assistant
applies exactly: extra namespaces to leave alone, the
minAvailable for new PodDisruptionBudgets, the user and
group ids for security-context fixes.
The body is ordinary prose, for the things that do not fit a
setting.
02 · Read strictly, every run
A typo is refused, loudly, never guessed at.
The file is read at the start of each run and stamped with its git
blob id, so any decision can be traced to the exact version. Every
setting passes a strict validator. A value that does not fit is
refused, the built-in default stays, and a warning names the
setting and the fallback taken.
policy-inspect --lint shows what was read, what was
applied and what was refused. policy-init prints a
commented starting file.
03 · "Never touch namespace X"
Namespaces you list are left out of the scan.
legacy-erp is run by another team. Listed under
excluded_namespaces_extra, its manifests are not sent
for analysis and get no repository-scan proposals.
The list can only add to the exclusions your installation
already has, never remove one. Agents that scan the whole cluster
(upgrades, monitoring, migration) still use the installation-wide
list; per-repository exclusions there are planned
Roadmap.
04 · Adjusted, not just allowed
Your defaults go into the diff.
A Deployment with three replicas and no PodDisruptionBudget gets
one proposed. Without a policy it would say
minAvailable: 1. With pdb.min_available: "50%"
it says 50%.
A floor that would block every voluntary eviction, such as
100%, is not proposed at all: a PDB that stops node
drains is worse than none.
05 · The prose is context
Read as guidance, never as a command.
The prose body reaches one place today: the repository-scan
analysis. It is capped at 2,000 characters, labelled with its
source and wrapped as untrusted content. "NetworkPolicy is not
enforced on this cluster" steers the analysis away from proposing
NetworkPolicies. "Ignore all previous instructions" does nothing.
Other agents do not read the prose yet
Roadmap, which matters for the next
rule.
06 · "We pin this chart on purpose"
Say it on the object itself.
A sentence in the prose will not stop an upgrade MR, because the
upgrade agent does not read the prose. The lever that does is an
annotation on the HelmRelease with the token
chart-upgrade. The next scan finds the newer chart,
sees the annotation, and stays quiet.
Tokens are per proposal class (chart-upgrade,
image-upgrade, monitoring,
right-sizing, rename, …), or
all. The annotation key itself is set per installation.
07 · Retired, with a reason
Being replaced is a reason, so record it.
A service on its way out keeps attracting proposals: probes,
upgrades, monitoring. retired:replacement=orders-v2
silences every agent for that object, like all, and
carries the reason with it, so the suppression is logged with its
rationale instead of looking like a gap.
08 · Every MR carries the lever
The way out is written into the MR.
MRs from the repository scan, right-sizing, monitoring, naming and
migration agents end with opt-out instructions: the exact annotation
and token that would stop this class of proposal for this object.
On any MR, a /skip comment prepares that change for you.
A "Policy applied" section naming the POLICY.md
setting and version behind a value is planned
Roadmap; today that trail lives in
the run log and in policy-inspect.