Reject unsupported inline pointer schemas safely

This commit is contained in:
2026-09-06 19:12:19 -05:00
parent be2ba9a20b
commit 3e70ad1285
4 changed files with 55 additions and 1 deletions

View File

@@ -589,7 +589,9 @@ Unexported fields and `yaml:"-"` are ignored. `omitempty` is accepted but does n
change binding or projection. An explicit `yaml:",inline"` flattens a struct
or pointer-to-struct, or designates at most one string-keyed inline map for otherwise
unmatched names. Ambiguous names, named inline fields, multiple inline maps, and
unsupported or malformed tag options are schema errors. Embedded fields are ordinary
unsupported or malformed tag options are schema errors. Inline pointers must
terminate in a struct; pointer-to-map and recursive pointer-only inline declarations
are rejected before the defaults factory runs. Embedded fields are ordinary
named fields unless explicitly inlined. `configkit:"secret"` is the only current
ConfigKit field tag and marks its bound field or container for secret classification
and redacted inspection.

View File

@@ -188,6 +188,12 @@ existing descendants remain explainable after parent replacement.
## 7. P2 — Reject unsupported inline pointer-to-map schemas safely
Status: complete. Schema construction rejects inline map pointers, including
multiple pointer levels, and detects nonterminating inline pointer chains. Public
regressions verify safe errors before defaults run; supported inline coverage stays
green. Full tests pass with the issue-8 TMPDIR workaround; vet, build and whitespace
checks pass.
Evidence: [schema.go](../../schema.go), `describeFields`, dereferences inline field
types before choosing the map branch, then stores a map descriptor for a field
whose actual reflected value is a pointer. [projection.go](../../projection.go)