Plan root defaults and independent stage overrides

This commit is contained in:
2026-11-08 14:58:37 +00:00
parent b7bad87659
commit 0b3734d352
2 changed files with 140 additions and 14 deletions

View File

@@ -117,6 +117,13 @@ file remain terminal.
its application schema. Native PromptKit resources own those settings and
their resolution. Coordinate the hard cutover and examples here, using the
resolved discovery and import policy above.
7. Account for the [root-default and stage-override model](glossary-stages.md#root-defaults-and-stage-overrides--resolved)
in version-3 schema design. Implement it during the glossary feature stage
after library adoption. Each stage resolves independently with explicit-value
presence and source provenance, and its module and validators receive consistent
effective settings. The glossary roadmap owns the remaining scope, precedence,
path, and attribution decisions. This application scope model does not change
native source composition or sibling-inheritance semantics.
## Documentation and Acceptance

View File

@@ -2,8 +2,8 @@
**Updated:** 2026-11-08
**Status:** Accepted scope for the next Audita major release. Initial outline;
detailed design and implementation remain pending. The
**Status:** Accepted scope and configuration model for the next Audita major
release. Remaining design decisions and implementation are pending. The
[master roadmap](library-adoption.md) owns sequencing and release completion.
## Baseline and Target
@@ -19,13 +19,50 @@ glossary and processes the transcript resulting from earlier stages. Operators
need not combine those inputs into one glossary or run Audita separately for
each pass.
This example describes the intended behavior, not a selected configuration syntax.
The major-release policy permits a hard cutover; the current single-glossary CLI
and pipeline representation do not constrain the target design.
The final representation belongs to the agreed
[version-3 application schema](configkit.md#application-schema-version--resolved),
with one hard cutover covering library adoption and this feature.
## Root Defaults and Stage Overrides — Resolved
Define global stage settings at the configuration root. Represent the pipeline
as an ordered `pipeline.stages` list of objects, each selecting a `module` and
optionally overriding stage settings. Use typed configuration fields, not a
separate variable-substitution language. The selected glossary configuration is:
```yaml
version: 3
glossary: party.yml
pipeline:
stages:
- module: glossary
- module: glossary
glossary: spells.yml
- module: grammar
```
Resolve every stage independently against the global settings. Omitted stage
settings inherit their global values; explicit stage values override them.
Preserve meaningful false, zero, and empty values under each setting's validation
rules rather than treating them as omission. A stage override does not alter
the root settings or the defaults seen by later stages.
In this example, the first glossary stage uses `party.yml`, the second uses
`spells.yml`, and grammar inherits `party.yml` wherever it or its validators
consume the glossary. Transcript changes carry forward between stages;
configuration overrides do not. A stage's module and associated validators
receive its effective stage settings consistently. Whether protected vocabulary
needs a broader selection remains an open domain decision below.
Apply this model to settings governing stage processing. Invocation-wide
concerns such as configuration discovery, output destinations, and reporting
mode remain global. The exact set of stage settings is still to be selected.
Preserve stage order, repeated modules, and explicit empty-pipeline behavior.
Use native ConfigKit loading, presence, and provenance facilities; Audita owns
the meaning of stage scope and passes the effective settings to its consumers.
## Sequencing and Work Outline
Implement after ConfigKit, PromptKit, CommandKit, and ReleaseKit adoption, and
@@ -34,11 +71,12 @@ adopted configuration and CLI conventions and avoids adapting it twice. Keep the
requirement visible during library design without expanding those migrations
into feature implementation.
1. Define how a stage selects its glossary, how input paths resolve, and how
defaults and CLI selection interact with stage configuration.
2. Carry the selected glossary through loading, stage execution, proposal
generation, and validation. Review glossary consumers outside the glossary
module so their input semantics are deliberate.
1. Finalize the stage-setting inventory, compound-value and clearing rules, path
resolution, and CLI precedence under the selected scope model. Incorporate
these into the version-3 schema rather than retain the old module-name list.
2. Resolve effective stage settings and carry them through stage execution,
proposal generation, and validation. Carry selected glossary inputs through
loading and settle the protected-vocabulary behavior for all consumers.
3. Make repeated stages and their selected inputs understandable in inspection,
diagnostics, and reports. Account for all consumed glossary files in input
handling and output-collision protection.
@@ -55,15 +93,96 @@ transcript changes. Verify meaningful errors for invalid selections or inputs,
and retain the selected domain validation and partial-success behavior. Exact
test cases follow the design; live provider calls are unnecessary.
Verify root fallback, per-stage override isolation, and explicit-value presence
for the selected stage settings. Include the grammar stage after the overridden
glossary stage to establish that it inherits the root glossary. Verify that each
stage's module and validators receive consistent effective settings, including
their recorded source origins. Cover repeated modules and an empty stage list.
## Open Decisions
Detailed choices are deliberately deferred to the feature-design discussion:
The recommendations below are proposals, not selected contracts.
- Stage representation, glossary references versus inline file paths, and
defaults or CLI overrides.
- Which glossary is used by other modules and validators, including protected
term checks and overlapping terms across inputs.
- Stage identity and input attribution in inspection, errors, and reports.
### Settings Eligible for Stage Scope
**Recommendation:** include glossary input, applicable confidence thresholds,
proposal/validation profile selection, and other settings that govern an
individual stage's work. Inventory current settings by the lifecycle of their
consumer before finalizing the schema. Keep discovery, transcript destinations,
reporting, and other invocation-wide settings global. This provides useful
flexibility without implying that a stage can reconfigure the entire run.
**Alternative:** initially expose only glossary overrides and add other stage
settings later. This reduces the first implementation's scope, but leaves an
incomplete application of the selected model and may require further schema
changes for settings already known to vary by stage.
### Compound Values and Explicit Clearing
**Recommendation:** resolve eligible settings by field, preserving explicit
presence and following the owning library's semantics for compound values.
Define omission, null, and empty behavior for each selected field; for glossary
input, distinguish inheriting a default from an intentional absence if that is
supported. Reuse native mechanisms rather than introducing a custom generic
deep-merge engine. This keeps partial stage settings useful and defaults visible.
**Alternative:** replace an entire settings group whenever that group appears
on a stage. This gives simple replacement semantics, but changing one value may
require repeating unrelated global settings. The choice must respect upstream
contracts for any library-owned resource rather than redefine their merging.
### CLI Overrides and Stage Precedence
**Recommendation:** an ordinary setting flag changes the root default; explicit
stage settings remain more specific. Add a supported targeted selection for
changing one stage when needed, coordinated with stage identity below. This
preserves the meaning of scope, but a global flag will not force the same value
onto every stage. Preserve explicit false, zero, and empty CLI values.
**Alternative:** apply ordinary CLI setting flags to every stage after resolving
stage settings. This makes a CLI override uniformly authoritative, but can erase
deliberate stage differences, including different glossary files. Choose and
document the rule before wiring flags; do not infer it from parser order.
### Relative Paths and Source Context
**Recommendation:** use ConfigKit's supported source context to resolve a
configuration path relative to the document supplying that value, and resolve
CLI paths relative to the working directory. A stage inheriting a root glossary
also inherits that value's source context. This supports reusable imported
configuration; verify the native facilities before selecting implementation.
**Alternative:** resolve all relative glossary paths from the working directory.
This has one simple base and suits invocation-local inputs, but makes reusable
configuration dependent on where Audita is launched. Decide the base explicitly
for no-main-file operation as well.
### Glossary Selection and Protected Vocabulary
**Recommendation:** start from each stage's effective glossary for its module
and validators, with no implicit carryover or union of other stage inputs. This
matches the selected scope model and keeps each stage understandable in isolation.
Review whether protecting terms corrected by earlier stages requires a separate,
explicit protected-vocabulary selection; overlapping terms need deliberate rules.
**Alternative:** protect vocabulary from all configured glossary inputs while
using the effective stage glossary for proposal generation. This could preserve
party names during later spell or grammar work, but makes stage behavior depend
on other stages' inputs and requires conflict and overlap semantics. Ordinary
input selection alone does not decide this protection policy.
### Stage Identity and Attribution
**Recommendation:** support optional operator-chosen stage IDs alongside execution
position and module identity. Use them for readable reports and targeted overrides
when supplied, and show each stage's effective inputs and source origins. This
helps distinguish repeated modules and survives reordering, but introduces ID
validation and selection rules that must be specified.
**Alternative:** identify stages only by position and module. This avoids another
configuration field, but positional references change when stages are reordered
and are less convenient for targeted overrides. In either case, retain ordered
execution and repeated modules rather than treating the pipeline as a set.
The capability and its inclusion in the next major release are settled. These
questions refine the design; they do not reopen whether to deliver the feature.