11# Chart-corpus findings: status ledger
22
3- Last reconciled 2026-07-28 after the call-dict navigation round
4- (forty-sixth), which extended the navigation base one level over: a helper's
3+ Last reconciled 2026-07-28 after the semver guard-chain round
4+ (forty-seventh), which taught a short-circuit chain's operands to carry
5+ their own decoded condition instead of an approximate marker, and repaired
6+ the member-carrier union that decode exposed. The call-dict navigation
7+ round (forty-sixth) extended the navigation base one level over: a helper's
58call dict binds ` .config ` to ` .Values.pdb ` , so the body's ` .config.enabled `
69navigates that path. The root-scoped ` with ` round (forty-fifth)
710closed the 5 nats deletions the preceding round could reach but not
@@ -2074,15 +2077,49 @@ strict Kubernetes schema while their valid controls passed.
20742077 battery finds exactly one acceptance flip: the other ten already claimed
20752078 those hosts through their own direct reads.
20762079
2077- The 20 that remain: three are the TEST-TEMPLATE roots (grafana's and
2080+ ** Semver guard chain CLOSED (forty-seventh round).**
2081+ kube-prometheus-stack's ` defaultRules ` and ` windowsMonitoring ` reject.
2082+ Every rule file gates on `and (semverCompare ">=1.14.0-0" $v)
2083+ (semverCompare "<9.9.9-9" $v) .Values.defaultRules.create …`, and the
2084+ condition decoder has answered ` semverCompare ` exactly for a long time —
2085+ but an OPERAND of a short-circuit chain took its execution guard from
2086+ ` direct_raw_identity_path ` alone, so anything that is not a raw values
2087+ path stood in as ` Approximate ` , and one approximate conjunct silences
2088+ every capture the later operands make. The policy version and the locals
2089+ bound to a Capabilities-defaulted version now reach the evaluator through
2090+ ` EvalEnv ` , and ` semver_constraint_predicate ` is the single model both the
2091+ decoder and the evaluator call, so the claim keeps the override's own
2092+ semantics: a too-old ` kubeTargetVersionOverride ` short-circuits the chain
2093+ and the deletion stays accepted. This is the general repair the datadog
2094+ ` fips ` lane needs too — its blocking conjuncts are an ` include ` equality
2095+ and a ` not (or …) ` , not a semver comparison.
2096+
2097+ The first measurement LOOSENED 408 probes, which uncovered a
2098+ pre-existing defect the new guard merely reached: a host whose
2099+ object-ness is claimed only under a guard leaves an UNTYPED member
2100+ carrier, ` try_merge_compatible ` opens with ` schema_type(a)? ` , and two
2101+ carriers for the SAME path therefore fell through to the union fallback —
2102+ ` anyOf[{properties: {alertmanager}}, {type: object, properties: {…37}}] ` ,
2103+ where a junk value in either half satisfies the other arm.
2104+ ` merge_untyped_member_carrier ` conjoins them member-wise and keeps the
2105+ weaker (untyped) domain. That repair moves 45 of 55 corpus schemas and
2106+ 2,575 battery probes, EVERY one a tightening: declared mapping leaves
2107+ (` *.enabled ` , ` *.create ` , ` service.type ` ) regaining the type their
2108+ values.yaml default declares. They are not helm-abort-justified — a
2109+ truthy string works as a gate — they are the declared-shape typing this
2110+ ledger keeps as policy (see the F80 kyverno scalar-shadow entry),
2111+ restored where the union had silently dropped it. The ci-values sweep
2112+ still rejects the same 4 of 116 real values files.
2113+
2114+ The 18 that remain: three are the TEST-TEMPLATE roots (grafana's and
20782115 fluent-bit's ` testFramework ` , kyverno's ` test ` ) — helm RENDERS
20792116 ` templates/tests/* ` and only filters the output afterwards, so switching
20802117 the corpus harness to the shipped ` include_tests ` default closes them, but
20812118 kyverno's ` test.nodeSelector ` /` tolerations ` then accept 21 values
20822119 ` kubeconform -strict ` rejects. Those values RENDER — the claim is about the
20832120 rendered sink, not about the guards a test template adds — so they belong
20842121 to the provider-required-leaf entry (F56/F62/F8) below, not here; the
2085- forty-third round corrected that attribution. The other 17 are NOT this mechanism:
2122+ forty-third round corrected that attribution. The other 15 are NOT this mechanism:
20862123 2 string-parameter calls behind the reverted ` upper ` catalog entry (harbor
20872124 ` logLevel ` , oauth2-proxy ` httpScheme ` ), 1 typed call through a ` tpl `
20882125 program (airflow ` multiNamespaceMode ` ), 5 YAML-sink text failures (the
@@ -2092,23 +2129,24 @@ strict Kubernetes schema while their valid controls passed.
20922129 reduction from the four ` include ` results to ` $message ` 's truthiness is
20932130 what is missing, not the absence case alone), 1 dotted root key (grafana's
20942131 literal ` grafana.ini ` ,
2095- "can't evaluate field paths in type string"), and 6 nil-pointer sites the
2132+ "can't evaluate field paths in type string"), and 4 nil-pointer sites the
20962133 navigated-host lane still cannot reach: istiod's root rewrite and signoz'
20972134 ` global ` have their own entries, grafana ` route ` needs ` tpl ` -program
2098- evaluation, datadog ` fips ` reads ` .Values.fips.enabled ` directly as the
2099- third conjunct of an ` and ` whose earlier operands do not decode — the
2100- capture exists and the guard chain is what blocks it,
2135+ evaluation, and datadog ` fips ` reads ` .Values.fips.enabled ` directly as
2136+ the third conjunct of an ` and ` whose earlier operands do not decode — the
2137+ capture exists and the guard chain is what blocks it, so it wants the
2138+ same operand-predicate treatment the forty-seventh round gave
2139+ ` semverCompare ` , extended to an ` include ` equality and a ` not (or …) ` .
21012140 traefik ` log ` needs an ` and ` operand's ` not ` decoded
21022141 exactly (attempted and REVERTED in the forty-second round — the exact
21032142 decode turned previously-approximate captures into guarded member-host
21042143 arms, which emptied declared-mapping bases across airflow, argo-cd, cilium
21052144 and datadog; the forty-third round confirmed that emptying is CORRECT for a
21062145 genuinely guarded-only host, so this needs its own adjudication of the
2107- 111 airflow flips rather than a fix to base classification), and
2108- kube-prometheus-stack's ` defaultRules ` /` windowsMonitoring ` sit behind
2109- ` semverCompare ` against ` .Capabilities.KubeVersion ` — the accepted
2110- approximate-guard limitation, though a structural evaluation of
2111- ` semverCompare ` at the configured target version would close them.
2146+ 111 airflow flips rather than a fix to base classification) — and the
2147+ forty-seventh round's carrier repair changes that lane's arithmetic,
2148+ since part of what those flips measured was the union fallback dropping
2149+ sibling typings rather than the base classification itself.
21122150
21132151- ** F56/F62/F8/F80/F98 — provider contracts still lose required leaves
21142152 and nested/helper payloads.** The remaining losses are bounded and have
0 commit comments