Simplify ADRs and relax premature constraints
This commit is contained in:
@@ -11,11 +11,11 @@ Accepted.
|
||||
## Context
|
||||
|
||||
Several downstream consumers of the ConfigKit and PromptKit libraries include
|
||||
duplicated or near-duplicated code relating to configuration inspection,
|
||||
routing, parsing, help, and error handling. However, their command vocabulary
|
||||
duplicated or near-duplicated code relating to configuration inspection,
|
||||
routing, parsing, help, and error handling. However, their command vocabulary
|
||||
and syntax have diverged. CommandKit aims to provide a single, unified CLI
|
||||
implementation that will reduce duplication, provide consistent vocabulary and
|
||||
grammar, and reduce the amount of code each individual applicaiton must own.
|
||||
implementation that will reduce duplication, provide consistent vocabulary and
|
||||
grammar, and reduce the amount of code each individual application must own.
|
||||
|
||||
Applications have genuine domain commands, such as Narratio's `session restore`,
|
||||
that remain outside the standard suite. Merely forwarding standard families from
|
||||
@@ -37,11 +37,9 @@ custom command names, domain meaning, validation, effects, artifacts, and
|
||||
operational outcomes.
|
||||
|
||||
Use namespace-first syntax for the standard suite, which provides a clear
|
||||
family ownership boundary. The initial release of CommandKit will ship with two
|
||||
bundled standard command families:
|
||||
(1) The `config` family provides ConfigKit inspection and validation; and
|
||||
(2) the `promptkit` family provides PromptKit inspection and utilities.
|
||||
CommandKit integrates ConfigKit and PromptKit through their supported public
|
||||
family ownership boundary. The initial standard command families are `config`
|
||||
for ConfigKit inspection and validation, and `promptkit` for PromptKit inspection
|
||||
and utilities. CommandKit integrates these libraries through their supported public
|
||||
semantics.
|
||||
|
||||
CommandKit accepts custom commands outside its reserved standard families and
|
||||
@@ -100,10 +98,10 @@ Bindings support ordinary typed fields and presence-aware fields where omission
|
||||
has a separate meaning. CommandKit records supplied state independently of values
|
||||
and defaults, preserving explicitly supplied empty, false, and zero values.
|
||||
|
||||
CommandKit creates fresh input storage per invocation and keeps its previous
|
||||
parsed values, collections, and presence out of subsequent invocations. Handler
|
||||
closures and application state retain their own lifecycle. Fresh CommandKit state
|
||||
addresses invocation lifetime; concurrent dispatch is a separate contract.
|
||||
CommandKit keeps parsed values, collections, and presence from one invocation out
|
||||
of subsequent invocations. Storage allocation and reuse are implementation
|
||||
choices. Handler closures and application state retain their own lifecycle;
|
||||
concurrent dispatch is a separate contract.
|
||||
|
||||
The invocation API supplies context and streams separately from CLI inputs.
|
||||
CommandKit creates its declarations and bindings from metadata and defers its
|
||||
@@ -117,8 +115,9 @@ an exact public API.
|
||||
### Outcomes and domain behavior
|
||||
|
||||
Resolve the command and handle help/version before loading application state.
|
||||
For execution, allocate fresh inputs, apply shared parsing and operand checks,
|
||||
then invoke the typed handler. Return its invocation outcome to the application.
|
||||
For execution, prepare independent invocation inputs, apply shared parsing and
|
||||
operand checks, then invoke the typed handler. Return its invocation outcome to
|
||||
the application.
|
||||
|
||||
CommandKit classifies shared usage errors and standard-family outcomes. Its
|
||||
handler result contract accepts application-specific outcomes and preserves their
|
||||
@@ -179,7 +178,7 @@ resources, with standard meanings preserved for operations that are installed.
|
||||
| Parsed-value accessor object | Uniform handlers, but string-based lookup, runtime type errors, and repeated assembly remain. |
|
||||
| Individual typed parameters | Clear for small commands; grows into long signatures and adapter machinery. Typed structs scale more naturally. |
|
||||
| Reflection and struct tags | Compact declarations, but adds a tag language, field-discovery rules, and runtime declaration validation. Explicit bindings keep declarations visible. |
|
||||
| Typed command objects | Can organize complex handlers. CommandKit's fresh input contract remains separate from caller-owned object lifetimes; objects are an application option. |
|
||||
| Typed command objects | Can organize complex handlers. CommandKit's invocation-state contract remains separate from caller-owned object lifetimes; objects are an application option. |
|
||||
| Generated bindings/adapters | Can combine compact authoring and typing, but adds tooling and generated-file maintenance without demonstrated need. |
|
||||
| Raw arguments | Simple routing integration, but returns common parsing and help to applications. |
|
||||
|
||||
@@ -195,7 +194,8 @@ support consistent mechanics without requiring reflection or generated code.
|
||||
|
||||
Shared parsing defects can affect every adopter. Consumer and backend integration
|
||||
evidence must protect selected semantics, including ownership conflicts, help
|
||||
without configuration, presence, fresh input, cancellation, and domain outcomes.
|
||||
without configuration, presence, independent invocation inputs, cancellation,
|
||||
and domain outcomes.
|
||||
CommandKit releases document intentional compatibility changes. Coordinated
|
||||
application documentation and subprocess-caller updates are recommended migration
|
||||
practices.
|
||||
|
||||
Reference in New Issue
Block a user