2026-10-09 12:57:40 +00:00
|
|
|
|
# Effective configuration diff review findings
|
|
|
|
|
|
|
|
|
|
|
|
Reviewed `3697a51..2ebdfb5` against the agreed [diff roadmap](diff.md),
|
|
|
|
|
|
[implementation plan](implementation.md), and
|
|
|
|
|
|
[ADR 0010](../adr/0010-effective-configuration-diff.md).
|
|
|
|
|
|
|
|
|
|
|
|
The root-owned facade, frozen canonical comparison, atomic sequence records,
|
|
|
|
|
|
operation-local combined sensitivity, detached snapshots, reference-only
|
|
|
|
|
|
credential comparison, and consumer-owned presentation broadly match the
|
|
|
|
|
|
selected architecture. The finding below is an unintended strengthening of
|
|
|
|
|
|
masking behavior and a corresponding hidden-change reporting error. It does
|
|
|
|
|
|
not call for changes to loading, credential handling, dependencies, or release
|
|
|
|
|
|
gates.
|
|
|
|
|
|
|
|
|
|
|
|
## 1. Restrict complete-region fallback to incompatible present shapes (P2)
|
|
|
|
|
|
|
2026-10-09 13:22:40 +00:00
|
|
|
|
Status: complete. The scalar/default descendant fallback is removed. The two
|
|
|
|
|
|
stronger-policy tests now require visible public content, and a separate
|
|
|
|
|
|
historical-only descendant case verifies that actual incompatible present kinds
|
|
|
|
|
|
still trigger complete-region masking. Public-load regressions cover the
|
|
|
|
|
|
unchanged scalar inside an atomic sequence and both addition/removal directions
|
|
|
|
|
|
across historical absence; they failed before the fix and pass afterward.
|
|
|
|
|
|
Historical sensitivity remains available to existing explanation rendering.
|
|
|
|
|
|
Focused diff tests, `./scripts/check.sh`, and `go test -race ./...` passed.
|
2026-10-09 12:57:40 +00:00
|
|
|
|
|
2026-10-09 13:22:40 +00:00
|
|
|
|
Affected at the reviewed commit: [diff_snapshot.go](../../internal/engine/diff_snapshot.go),
|
2026-10-09 12:57:40 +00:00
|
|
|
|
`preparePairedDiffNodes`, lines 63–66; and
|
|
|
|
|
|
[diff_snapshot_test.go](../../internal/engine/diff_snapshot_test.go),
|
|
|
|
|
|
`TestPreparePairedDiffSnapshotUsesHistoricalDescendantClassification`
|
|
|
|
|
|
(lines 244–252) and
|
|
|
|
|
|
`TestPreparePairedDiffSnapshotFallbackPreservesAbsentReportedSide`
|
|
|
|
|
|
(lines 255–263).
|
|
|
|
|
|
|
|
|
|
|
|
The agreed implementation decisions 7–9 distinguish absence from a mismatch
|
|
|
|
|
|
between two present kinds. Complete-region masking is selected when an actual
|
|
|
|
|
|
structural replacement makes a classified descendant unsafe to correspond.
|
|
|
|
|
|
Public-only changes alongside unchanged masked content must retain
|
|
|
|
|
|
`HiddenChanged=false`.
|
|
|
|
|
|
|
|
|
|
|
|
The implementation already detects incompatible present kinds at lines 45–49,
|
|
|
|
|
|
but its scalar/default branch independently requests fallback whenever a strict
|
|
|
|
|
|
sensitive descendant exists. It does this even when both scalar values are
|
|
|
|
|
|
equal, or when one side is absent. Historical classification beneath a scalar
|
|
|
|
|
|
therefore masks otherwise public changes, potentially including the entire
|
|
|
|
|
|
containing atomic sequence, and sets `HiddenChanged=true` without a changed
|
|
|
|
|
|
classified value or an incompatible present-shape replacement.
|
|
|
|
|
|
|
|
|
|
|
|
Two public-API reproductions failed at the reviewed commit:
|
|
|
|
|
|
|
|
|
|
|
|
1. Both loads start with `items: [{secret: disposable}, N]`. A recorded resolver
|
|
|
|
|
|
replaces the first element with the same public scalar in both loads. The
|
|
|
|
|
|
path predicate retains historical sensitivity at `/items/0/secret`, while
|
|
|
|
|
|
only the public second element changes from `1` to `2`. Ordinary effective
|
|
|
|
|
|
rendering shows the public sequence. Diff instead returns wholly redacted
|
|
|
|
|
|
left/right sequence snapshots and `HiddenChanged=true`.
|
|
|
|
|
|
2. The left load removes `dynamic.entry` through recorded resolution after
|
|
|
|
|
|
observing a classified historical `dynamic.entry.token`. The right load
|
|
|
|
|
|
adds `dynamic.entry: public`. Diff correctly keeps the left side absent but
|
|
|
|
|
|
masks the public right scalar and reports a hidden change solely because of
|
|
|
|
|
|
the old descendant selector.
|
|
|
|
|
|
|
|
|
|
|
|
Required remediation:
|
|
|
|
|
|
|
|
|
|
|
|
- Remove the additional scalar/default descendant fallback. Preserve masking
|
|
|
|
|
|
for classified ancestors/equal paths and the existing incompatible-present-
|
|
|
|
|
|
kind fallback, including nested and historical-only descendant cases.
|
|
|
|
|
|
- Preserve targeted masking across absence and return public scalar snapshots
|
|
|
|
|
|
when no corresponding current value is classified. Do not solve this by
|
|
|
|
|
|
weakening either-side classification or discarding historical selectors.
|
|
|
|
|
|
- Revise the two named tests, which currently encode the stronger policy:
|
|
|
|
|
|
same-kind scalar replacements and absent-to-scalar additions should not
|
|
|
|
|
|
trigger fallback solely from a historical descendant selector. Keep separate
|
|
|
|
|
|
coverage that actual incompatible present kinds still trigger full masking.
|
|
|
|
|
|
- Add bounded public-load regressions for the two cases above, checking presence,
|
|
|
|
|
|
visible public snapshots, and `HiddenChanged=false`; include reverse-direction
|
|
|
|
|
|
comparison where it supplies distinct protection. Reuse existing masking and
|
|
|
|
|
|
ownership tests rather than introduce a second implementation.
|
|
|
|
|
|
- Run focused diff tests, `./scripts/check.sh`, and the applicable ownership/race
|
|
|
|
|
|
checks. Reconcile completion evidence with the corrected behavior; do not
|
|
|
|
|
|
strengthen the roadmap to accommodate the unintended restriction.
|
|
|
|
|
|
|
|
|
|
|
|
## Review validation
|
|
|
|
|
|
|
|
|
|
|
|
- `./scripts/check.sh` passed at `2ebdfb5`: formatting, whitespace, all-package
|
|
|
|
|
|
tests, vet, and build.
|
|
|
|
|
|
- `GOTOOLCHAIN=local GOPROXY=off go test -race ./...` passed.
|
|
|
|
|
|
- `GOTOOLCHAIN=local GOPROXY=off go test -count=1 ./...` passed.
|
|
|
|
|
|
- Two additional public-load probes in a disposable checkout outside this
|
|
|
|
|
|
repository failed with the outputs described above. Removing only the
|
|
|
|
|
|
scalar/default fallback made both probes pass. The two named existing tests
|
|
|
|
|
|
then failed, confirming that their expectations preserve the contract drift.
|
|
|
|
|
|
- No production fixes or regression tests were added to this repository during
|
|
|
|
|
|
the review. No benchmarks were needed or performance guarantees inferred.
|