Verify native bundle and configuration reports
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# PromptKit v0.18.0 implementation plan
|
# PromptKit v0.18.0 implementation plan
|
||||||
|
|
||||||
Status: Stages 1–3 complete; Stages 4–7 remain.
|
Status: Stages 1–4 complete; Stages 5–7 remain.
|
||||||
|
|
||||||
## Authority and execution
|
## Authority and execution
|
||||||
|
|
||||||
@@ -148,6 +148,8 @@ fixture bundle choices. Existing assertions can still fail until Stage 4.
|
|||||||
|
|
||||||
## Stage 4: Refresh adapter expectations and bundle coverage
|
## Stage 4: Refresh adapter expectations and bundle coverage
|
||||||
|
|
||||||
|
**Complete.** The ckprompt package suite passes with native normalized reports, and bundled profile and source evidence reach command output.
|
||||||
|
|
||||||
1. Adjust configuration path expectations to the new list indexes and returned
|
1. Adjust configuration path expectations to the new list indexes and returned
|
||||||
native normalized values/history. With the bundle enabled, derive relevant
|
native normalized values/history. With the bundle enabled, derive relevant
|
||||||
records/paths from the returned view rather than assuming application records
|
records/paths from the returned view rather than assuming application records
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import (
|
|||||||
commandkit "go.maximumdirect.net/commandkit"
|
commandkit "go.maximumdirect.net/commandkit"
|
||||||
configkit "go.maximumdirect.net/configkit"
|
configkit "go.maximumdirect.net/configkit"
|
||||||
promptkit "go.maximumdirect.net/promptkit"
|
promptkit "go.maximumdirect.net/promptkit"
|
||||||
|
"go.yaml.in/yaml/v4"
|
||||||
)
|
)
|
||||||
|
|
||||||
const adapterPrompt = `prompts:
|
const adapterPrompt = `prompts:
|
||||||
@@ -288,7 +289,7 @@ func TestConfigScopeUsesNativeInspectionFacetsAndInvocationValues(t *testing.T)
|
|||||||
t.Fatalf("scope acquisition = (%#v, %v), calls=%d", acquired, err, loaderCalls)
|
t.Fatalf("scope acquisition = (%#v, %v), calls=%d", acquired, err, loaderCalls)
|
||||||
}
|
}
|
||||||
var effective bytes.Buffer
|
var effective bytes.Buffer
|
||||||
if err := acquired.Value.Effective.WriteEffective(&effective); err != nil || !strings.Contains(effective.String(), "briefing:") {
|
if err := acquired.Value.Effective.WriteEffective(&effective); err != nil || !strings.Contains(effective.String(), "id: briefing") {
|
||||||
t.Fatalf("native effective report = %q, %v", effective.String(), err)
|
t.Fatalf("native effective report = %q, %v", effective.String(), err)
|
||||||
}
|
}
|
||||||
if sources := acquired.Value.Sources.Sources(); len(sources) == 0 || sources[0].ID == "" {
|
if sources := acquired.Value.Sources.Sources(); len(sources) == 0 || sources[0].ID == "" {
|
||||||
@@ -299,6 +300,59 @@ func TestConfigScopeUsesNativeInspectionFacetsAndInvocationValues(t *testing.T)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBundledRecordsAndSourcesReachCommandOutput(t *testing.T) {
|
||||||
|
engine := bundledEngine(t)
|
||||||
|
ctx := context.Background()
|
||||||
|
profiles, err := engine.ListProfiles(ctx)
|
||||||
|
if err != nil || len(profiles) == 0 {
|
||||||
|
t.Fatalf("native bundled profiles = %v, %v", profiles, err)
|
||||||
|
}
|
||||||
|
inspection, err := engine.InspectConfiguration()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sources := inspection.Sources()
|
||||||
|
if len(sources) == 0 || sources[0].ID == "" {
|
||||||
|
t.Fatalf("native bundled sources = %#v", sources)
|
||||||
|
}
|
||||||
|
load := func(context.Context, ckconfig.Selection, struct{}, struct{}) (*promptkit.Engine, error) {
|
||||||
|
return engine, nil
|
||||||
|
}
|
||||||
|
app, err := commandkit.New(commandkit.Identity{Name: "bundle"}, Command(FromEngine(load)), ckconfig.Command(ckconfig.Suite[struct{}, struct{}]{Scopes: []ckconfig.Scope[struct{}, struct{}]{ConfigScope(load)}}))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
var out bytes.Buffer
|
||||||
|
result := app.Execute(ctx, []string{"promptkit", "list", "profiles", "--format", "yaml"}, commandkit.Streams{Out: &out, Err: io.Discard})
|
||||||
|
var gotProfiles []string
|
||||||
|
if result.Kind != commandkit.OutcomeSuccess {
|
||||||
|
t.Fatalf("profile catalog = %#v: %s", result, out.String())
|
||||||
|
}
|
||||||
|
if err := yaml.Unmarshal(out.Bytes(), &gotProfiles); err != nil || !slices.Contains(gotProfiles, profiles[0]) {
|
||||||
|
t.Fatalf("bundled profile %q missing from catalog %q: %v", profiles[0], out.String(), err)
|
||||||
|
}
|
||||||
|
out.Reset()
|
||||||
|
result = app.Execute(ctx, []string{"config", "sources", "--scope", "promptkit", "--format", "yaml"}, commandkit.Streams{Out: &out, Err: io.Discard})
|
||||||
|
var report struct {
|
||||||
|
Sources []struct {
|
||||||
|
ID string `yaml:"id"`
|
||||||
|
Label string `yaml:"label"`
|
||||||
|
} `yaml:"sources"`
|
||||||
|
}
|
||||||
|
if result.Kind != commandkit.OutcomeSuccess {
|
||||||
|
t.Fatalf("source report = %#v: %s", result, out.String())
|
||||||
|
}
|
||||||
|
if err := yaml.Unmarshal(out.Bytes(), &report); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, source := range report.Sources {
|
||||||
|
if source.ID == sources[0].ID && source.Label == sources[0].Label {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Fatalf("bundled source %#v missing from report %q", sources[0], out.String())
|
||||||
|
}
|
||||||
|
|
||||||
func TestConfigScopeRetainsNilLoaderIssueAfterCapabilitiesAreCleared(t *testing.T) {
|
func TestConfigScopeRetainsNilLoaderIssueAfterCapabilitiesAreCleared(t *testing.T) {
|
||||||
scope := ConfigScope[int, int](nil)
|
scope := ConfigScope[int, int](nil)
|
||||||
if scope.Acquire != nil {
|
if scope.Acquire != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user