191 lines
11 KiB
Markdown
191 lines
11 KiB
Markdown
# Configuration Overlay Rename Implementation Plan
|
|
|
|
Status: Stage 1 complete. Execute Stage 2.
|
|
|
|
## Scope and operating instructions
|
|
|
|
This plan implements the approved [overlay roadmap](overlays.md). That document
|
|
owns naming, preserved behavior, and the decision to make a breaking minor-release
|
|
change without compatibility aliases. Baseline: `d8d9dbf`; implemented code is
|
|
unchanged from `aead20f`. The intended release is v0.4.0, but this plan does not
|
|
authorize a release, push, tag, dependency upgrade, or downstream repository edit.
|
|
|
|
The target implementer is a gpt-5.6-terra coding agent. Each stage is one coherent,
|
|
reviewable unit. Stage 1 is broader in file count but is a mechanical rename of
|
|
one feature; splitting the public/engine/consumer rename would leave a broken
|
|
build or require temporary compatibility machinery. Stage 2 owns the additional
|
|
regression evidence and final migration audit, not a second implementation.
|
|
|
|
Before each stage:
|
|
|
|
- Read `AGENTS.md`, [development guidance](../development.md), and all policies:
|
|
[agents](../policy/agents.md), [architecture](../policy/architecture.md),
|
|
[documentation](../policy/documentation.md), [testing](../policy/testing.md),
|
|
and [release](../policy/release.md).
|
|
- Inspect Git status and preserve unrelated work. Prefer the repository's graph
|
|
tools for code discovery; use text searches for strings and documentation.
|
|
- Read the roadmap and the current selected-input contract in `docs/config.md`.
|
|
Inventory references before changing them; do not blindly replace every
|
|
occurrence of "profile" across the repository.
|
|
- Keep dependencies and toolchains available before offline validation. Use the
|
|
normal local development checks, not a real release workflow. Never wait for CI.
|
|
|
|
At each stage's end, update this plan's status with completion and validation
|
|
evidence, review the diff, and commit that stage with a short plain-English
|
|
message under the agent policy. Do not commit failed or incomplete work as if
|
|
the stage were complete. Do not repeat checks merely to create the commit.
|
|
|
|
## Stage 1 — Rename the feature end to end
|
|
|
|
### Outcome
|
|
|
|
The repository builds and existing tests pass using the new public API, selected
|
|
directory, layer values, diagnostics, and current documentation. No legacy API
|
|
aliases or filesystem fallbacks remain. Existing selection/merge semantics stay
|
|
unchanged.
|
|
|
|
### Implementation
|
|
|
|
1. Apply every public mapping in the roadmap's **Target terminology and public
|
|
surface** table. Change `Options[T].Profile` to `Overlay` in root
|
|
`lifecycle.go` and engine `load.go`, including the facade options conversion.
|
|
Change `LayerProfile` to `LayerOverlay` with string value `overlay`, and all
|
|
seven `CodeProfile*` constants to their `CodeOverlay*` equivalents and
|
|
`overlay.*` strings in both `records.go` files. Remove the old declarations;
|
|
do not leave aliases, deprecated fields, or dual emitted values.
|
|
2. Keep merge mechanics in `internal/engine/overlay.go`. Rename the acquisition
|
|
files `internal/engine/profile.go` and `profile_test.go` to
|
|
`selected_overlay.go` and `selected_overlay_test.go`. Use `activeOverlay`,
|
|
`validOverlayName`, `loadSelectedOverlayDocument`, `readOverlayFile`, and
|
|
`overlayDirectiveDiagnostics` for their corresponding helpers. Rename
|
|
test helpers and local variables consistently; do not otherwise refactor the
|
|
loading pipeline or merge algorithm.
|
|
3. Update engine `options.go`, `load_input.go`, `directives.go`, `overlay.go`, and
|
|
`explain_render.go`, plus any other callers found by discovery. Load only
|
|
`overlays/<name>.yml`; use the same prefix in source labels. Update diagnostic
|
|
messages about the selected feature. Preserve shared `options.*`, `import.*`,
|
|
source, and parser classifications where the baseline uses them.
|
|
4. Migrate existing tests and assertions, including selected-file tests and
|
|
engine `overlay_test.go`, `override_test.go`, `provenance_test.go`,
|
|
`metadata_test.go`, `explain_test.go`, `render_test.go`, `glob_test.go`, and
|
|
`source_fifo_test.go`. Update names, selected-file paths, expected layers,
|
|
codes, and rendered terminology. Preserve the semantic expectations; do not
|
|
relax unrelated assertions to obtain a green suite.
|
|
5. Rename `LoadNarratioProfile` to `LoadNarratioOverlay` in the maintained
|
|
consumer example, update its callers and `Options` literals, and move
|
|
`examples/consumers/testdata/narratio/profiles/testing.yml` to
|
|
`examples/consumers/testdata/narratio/overlays/testing.yml`. Preserve
|
|
`ModelProfile`, its `model_profile` YAML key, and their domain meaning.
|
|
6. Update Go declaration/package comments, README, `docs/config.md`,
|
|
`docs/consumers/README.md`, architecture-policy terminology, development test
|
|
paths/commands, and implemented-component documentation where affected.
|
|
Rename the contract heading to **Selected overlays** and repair all inbound
|
|
links, including links from this plan or the roadmap if needed. Current docs
|
|
must match the Stage 1 implementation; do not postpone that work to Stage 2.
|
|
7. In `docs/internal/extraction.md`, distinguish literal upstream symbols and
|
|
historical claims from descriptions of current ConfigKit helpers. Preserve
|
|
upstream names/revisions; update current ConfigKit references. Preserve
|
|
accepted ADR decision text and historical release notes. Repair historical
|
|
navigation links only where necessary. No new architecture decision is needed
|
|
for this terminology-only change.
|
|
8. Add a concise migration section to the consumer guide: rename option/constant
|
|
identifiers, move selected files, update handling of layer/diagnostic strings,
|
|
and rebuild. Link to current canonical behavior rather than duplicating the
|
|
full specification. Explain that application-owned profiles remain unchanged
|
|
and any application CLI flag rename belongs to that application. Do not
|
|
create `docs/releases/v0.4.0.md` in this implementation stage.
|
|
|
|
### Validation and acceptance
|
|
|
|
- Run `gofmt` on changed Go files, then `./scripts/check.sh`. Its complete suite
|
|
covers the migrated engine tests, maintained consumers, examples, documentation
|
|
links, and facade/dependency boundaries; do not rerun these subsets just to
|
|
duplicate successful coverage.
|
|
- Review that empty selection and lowercase `default` still mean no selection;
|
|
the name grammar, `.yml` convention, filesystem checks, error ordering, merge
|
|
rules, budgets, CLI precedence, and lifecycle are unchanged.
|
|
- Review output assertions to ensure `overlay` and `overlay.*` propagate through
|
|
both the engine and public wrappers, including history and explanations.
|
|
- Review `git diff` for accidental changes to `model_profile`, historical
|
|
evidence, merge logic, dependencies, or release machinery.
|
|
|
|
Stage 1 is complete only with a compiling, passing repository and matching
|
|
current documentation. It is not permission to ship before Stage 2's audit.
|
|
|
|
### Completion
|
|
|
|
Completed 2026-09-23. Renamed the selected configuration feature across the
|
|
facade, engine, maintained consumer, fixtures, contract, and current guidance;
|
|
application-owned `ModelProfile` and `model_profile` remain unchanged. `gofmt` and
|
|
`./scripts/check.sh` passed on Go 1.26.8/linux. Review confirmed the new
|
|
`overlays/<name>.yml` path, `overlay`/`overlay.*` public values, and no retained
|
|
legacy Go declarations or filesystem fallback.
|
|
|
|
## Stage 2 — Verify the breaking migration and finalize the handoff
|
|
|
|
### Outcome
|
|
|
|
Focused regression tests demonstrate the intentional break and protect against
|
|
legacy fallback or over-broad renaming. The final public surface and consumer
|
|
instructions match the roadmap, with no unresolved migration work in this repo.
|
|
|
|
### Implementation and review
|
|
|
|
1. Extend the renamed selected-file selection test using real temporary files:
|
|
- A selected file under `overlays/` loads successfully.
|
|
- The same selected name present only under `profiles/` yields
|
|
`CodeOverlayMissing` and no usable result; it is not silently loaded.
|
|
- When both locations exist with different values, only the `overlays/`
|
|
file contributes to configuration and sources. Assert the selected source's
|
|
new label and `LayerOverlay`; do not manufacture extra source records.
|
|
Retain the existing empty/default, invalid-name, missing-file, and `.yaml`
|
|
no-fallback cases. Reuse existing helpers rather than a new fixture framework.
|
|
2. Confirm that a normal explicit import from a directory named `profiles`
|
|
remains valid and has base-layer semantics. Add one focused case if existing
|
|
import coverage does not establish it. This protects the specific decision
|
|
not to reserve or ban the old word outside named-overlay selection.
|
|
3. Verify the public facade with the maintained consumer test. Extend that test
|
|
only as necessary to assert its application-owned `ModelProfile` remains
|
|
intact while overlay selection and public source metadata use the new names.
|
|
Engine tests own the detailed negative cases; do not replicate them all at
|
|
the root boundary.
|
|
4. Check coverage for the new public layer/code string values and explanation
|
|
output. Prefer the migrated behavioral assertions; if a mapping lacks
|
|
coverage, add a small assertion at its existing owner. Do not introduce a
|
|
blanket ban on the text "profile" in diagnostics or user data, and do not
|
|
snapshot human wording that is not contractual.
|
|
5. Inspect `go doc -all .` and source references against the baseline. Confirm
|
|
that `Options.Profile`, `LayerProfile`, and `CodeProfile*` declarations are
|
|
gone, that all roadmap mappings exist, and that no unrelated exported API
|
|
changed. A manual source/API review is sufficient for removal of old Go
|
|
identifiers; no negative-compilation harness or whole-API golden file is
|
|
required.
|
|
6. Audit remaining case-insensitive "profile" references in tracked content.
|
|
Classify rather than delete them automatically. Legitimate remaining uses
|
|
include application fields, immutable history/upstream evidence, migration
|
|
guidance, this plan, and explicit negative/no-fallback test fixtures. Repair
|
|
any active ConfigKit feature names, stale file paths, or heading links.
|
|
7. Finish migration guidance and any gaps found in current docs alongside fixes.
|
|
Record that v0.4.0 release preparation must explain all four breaking
|
|
surfaces: Go API, selected-file directory, provenance layer, and diagnostic
|
|
codes. Actual version selection, release-note creation, tagging, and pushing
|
|
remain a separately authorized release task using the existing procedure.
|
|
8. Once validated, mark this plan complete and reduce the feature roadmap to a
|
|
completion summary linking to the current configuration contract and consumer
|
|
migration guidance. Retain completed records until release preparation;
|
|
do not leave competing normative definitions in roadmap documents.
|
|
|
|
### Validation and acceptance
|
|
|
|
Run `./scripts/check.sh` for changed code and docs. Run
|
|
`GOPROXY=off go test -race ./internal/engine` for the final migrated engine,
|
|
including the existing concurrent-load independence coverage. Do not introduce
|
|
new release gates, external integration tests, CI waits, or mandatory macOS
|
|
checks. If a broader equivalent validation already passed for unchanged content,
|
|
reuse that evidence rather than repeating it.
|
|
|
|
Report the stage commit, validation results, any skipped platform-specific cases,
|
|
and the API/filesystem migration summary. The implementation is complete only
|
|
when both stages pass and the roadmap's target surface and preserved behavior
|
|
are accounted for. There are no unresolved product questions in this plan.
|