Record ConfigKit inheritance review findings
This commit is contained in:
97
docs/roadmap/remediation.md
Normal file
97
docs/roadmap/remediation.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# ConfigKit Inheritance Review Remediation
|
||||
|
||||
## Review Scope And Overall Result
|
||||
|
||||
Reviewed on 2026-10-04, comparing implementation commits `ec99d48` through
|
||||
`6450994` with the baseline `9e74df0`, the ConfigKit feature roadmap, and its
|
||||
eight-stage implementation plan.
|
||||
|
||||
The architecture matches the intended design. ConfigKit v0.5.0 owns source
|
||||
composition and native sibling inheritance before decoding. Notarius retains
|
||||
its typed defaults, presence-sensitive validation, declaration-relative path
|
||||
normalization, detached runtime configuration, catalog-dependent resolution,
|
||||
and private redacted inspection boundary. The production configuration adapter
|
||||
needed no changes; the work adds the dependency update, integration tests,
|
||||
documentation, and the derived development pipeline example.
|
||||
|
||||
No production regression or inadvertently strengthened requirement was found.
|
||||
In particular, the implementation adds no inheritance whitelist, new schema
|
||||
version, custom merging, path-containment rule, template exemption, or release
|
||||
gate. The newly reserved `extends` key is the expressly adopted upstream
|
||||
compatibility change.
|
||||
|
||||
Two follow-ups remain: a path-test blind spot and an incomplete documented
|
||||
command. This document records remediation work only; it does not authorize
|
||||
unrelated runtime refactoring.
|
||||
|
||||
## Finding 1 — Make The Path Fixture Distinguish Declaring Directories
|
||||
|
||||
Priority: P2. Category: verification gap.
|
||||
|
||||
Evidence: `internal/core/config/inheritance_test.go:338–436`,
|
||||
`TestInheritedReferencePathsKeepDeclaringSource`.
|
||||
|
||||
The parent, child, and overlay files live in `root/parents`, `root/children`,
|
||||
and `root/overlays`. Their resource paths all use `../fixtures/<name>`, and
|
||||
the expected paths all point into `root/fixtures`. Resolving one of these
|
||||
paths from any of the three directories yields the same result. Thus, choosing
|
||||
the child's directory for an inherited step/nested reference, or choosing the
|
||||
parent's directory for an overlay replacement, could still pass this test.
|
||||
|
||||
`TestInheritedInspectionRetainsOriginsRedactionAndOwnership` does distinguish
|
||||
the parent directory for a simple inherited `./shared.txt` reference. It does
|
||||
not close the blind spot for the nested, ordered-step, direct-child replacement,
|
||||
and overlay cases in the larger path fixture.
|
||||
|
||||
Required change:
|
||||
|
||||
- Revise the existing path fixture to use directory-distinguishing relative
|
||||
paths for these cases, such as `./shared.txt`, `./step.txt`, and a child-local
|
||||
replacement. Assert inherited paths against the parent's directory, direct
|
||||
replacements against the child's directory, and overlay-supplied paths
|
||||
against the overlay's directory.
|
||||
- Retain a separate legitimate `../` example to protect the existing host-path
|
||||
behavior. Avoid making every path converge on one shared sibling directory.
|
||||
- Keep this as a focused real-file configuration test. Change production
|
||||
resolution only if the improved assertions expose an actual defect.
|
||||
|
||||
Acceptance: choosing a parent, child, or overlay directory incorrectly produces
|
||||
a different absolute path and fails the relevant assertion. Nested inheritance,
|
||||
inherited ordered-step references, child replacements, and overlay replacements
|
||||
still pass with the actual resolver.
|
||||
|
||||
Validation: `GOWORK=off go test ./internal/core/config`.
|
||||
|
||||
## Finding 2 — Supply Input In The Development Pipeline Command
|
||||
|
||||
Priority: P3. Category: documentation accuracy.
|
||||
|
||||
Evidence: `docs/config.md:43–49`, in Maintained Examples.
|
||||
|
||||
The new example says to select the development pipeline with
|
||||
`notarius run dnd-session-development --config /path/to/dnd-complete.config.yml`.
|
||||
The run command requires `--input`. Executing the equivalent command against
|
||||
the maintained configuration returns `notarius: run requires --input` with CLI
|
||||
exit status 2, before pipeline execution.
|
||||
|
||||
Required change: include a transcript input placeholder in the invocation,
|
||||
for example `--input /path/to/transcript.json`, and retain the link to the CLI
|
||||
reference for the full invocation contract. No CLI behavior change or new test
|
||||
framework is needed.
|
||||
|
||||
Acceptance: the documented command supplies both required run inputs—the
|
||||
pipeline ID and input path—and uses the implemented flag names. Verify against
|
||||
the CLI reference and existing parser coverage without a live model request.
|
||||
|
||||
## Checks Completed During Review
|
||||
|
||||
- `GOWORK=off go test ./...` passed.
|
||||
- `GOWORK=off go vet ./...` passed.
|
||||
- `GOWORK=off go build` of `./cmd/notarius` to a temporary destination passed.
|
||||
- `GOWORK=off go mod tidy -diff` produced no changes.
|
||||
- The selected ConfigKit module is v0.5.0; PromptKit remains v0.11.2.
|
||||
- The implementation diff passed whitespace checks.
|
||||
- The incomplete development invocation was reproduced without provider calls.
|
||||
|
||||
The passing suite establishes the current tested behavior; it does not resolve
|
||||
the path-fixture blind spot identified above.
|
||||
Reference in New Issue
Block a user