Adopt tagged diagnostic catalogs

This commit is contained in:
2026-10-13 16:28:41 +00:00
parent 7291d23587
commit b9c232ee63
8 changed files with 89 additions and 21 deletions

View File

@@ -312,8 +312,8 @@ cross-version compatibility boundary.
The selected catalog modules, not this document, own their profile inventories: The selected catalog modules, not this document, own their profile inventories:
- [OpenRouter catalog v3.20260930.0 profiles](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/tag/v3.20260930.0/catalog/profiles) - [OpenRouter catalog v3.20261013.0 profiles](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/tag/v3.20261013.0/catalog/profiles)
- [Rakestrawhome catalog v3.20260930.0 profiles](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/tag/v3.20260930.0/catalog/profiles) - [Rakestrawhome catalog v3.20261013.0 profiles](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/tag/v3.20261013.0/catalog/profiles)
These are tested local data, not a promise of live provider availability. These are tested local data, not a promise of live provider availability.
The [release policy](policy/release.md#catalog-profile-compatibility) owns The [release policy](policy/release.md#catalog-profile-compatibility) owns

View File

@@ -114,10 +114,12 @@ change rendering behavior.
## Profiles And Built-Ins ## Profiles And Built-Ins
`internal/catalog` selects the released keyed OpenRouter and Rakestrawhome `internal/catalog` selects the tagged OpenRouter `v3.20261013.0` and
assets as one ConfigKit underlay and PromptKit-owned profiles as the next. Rakestrawhome `v3.20261013.0` assets as one ConfigKit underlay and PromptKit-owned
It discovers YAML inputs and supplies passive filesystem context without profiles as the next. The selected catalog tags are local candidates and may not
parsing or pre-validating catalog definitions. The configuration loader be publicly available. It discovers YAML inputs, including each catalog's
opt-in diagnostic root, and supplies passive filesystem context without parsing
or pre-validating catalog definitions. The configuration loader
validates only the final effective backend and profile values, including validates only the final effective backend and profile values, including
consumer overlays of maintained bases or backends. There is no catalog-only consumer overlays of maintained bases or backends. There is no catalog-only
preflight, reserved source namespace, or replay of backend registration. preflight, reserved source namespace, or replay of backend registration.

View File

@@ -41,32 +41,32 @@ License and notices: [LGPL 3.0](../../LICENSE) |
## Promptkit OpenRouter Catalog v3 ## Promptkit OpenRouter Catalog v3
Selected module: `gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3` Selected module: `gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3`
at `v3.20260930.0`. at `v3.20261013.0`.
Copyright (C) 2026 Eric Rakestraw Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: MIT SPDX-License-Identifier: MIT
License and notices: [MIT](licenses/MIT.txt) | License and notices: [MIT](licenses/MIT.txt) |
[COPYRIGHT](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/f17d208cb7ad1fb043cda2266cd3011d11b40aa0/COPYRIGHT) | [COPYRIGHT](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/2a69672b1bb220f1a730153341470f5ac67e15f4/COPYRIGHT) |
[LICENSE](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/f17d208cb7ad1fb043cda2266cd3011d11b40aa0/LICENSE). [LICENSE](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/2a69672b1bb220f1a730153341470f5ac67e15f4/LICENSE).
[Source](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/f17d208cb7ad1fb043cda2266cd3011d11b40aa0). [Source](https://gitea.maximumdirect.net/eric/promptkit-backend-openrouter/src/commit/2a69672b1bb220f1a730153341470f5ac67e15f4).
## Promptkit Rakestrawhome Catalog v3 ## Promptkit Rakestrawhome Catalog v3
Selected module: `gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3` Selected module: `gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3`
at `v3.20260930.0`. at `v3.20261013.0`.
Copyright (C) 2026 Eric Rakestraw Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: MIT SPDX-License-Identifier: MIT
License and notices: [MIT](licenses/MIT.txt) | License and notices: [MIT](licenses/MIT.txt) |
[COPYRIGHT](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/993443d88c451901f4c917fa00c204fd3b54d28d/COPYRIGHT) | [COPYRIGHT](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/d40a8aad50111c15d279469170f7b5032ac22529/COPYRIGHT) |
[LICENSE](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/993443d88c451901f4c917fa00c204fd3b54d28d/LICENSE). [LICENSE](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/d40a8aad50111c15d279469170f7b5032ac22529/LICENSE).
[Source](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/993443d88c451901f4c917fa00c204fd3b54d28d). [Source](https://gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/src/commit/d40a8aad50111c15d279469170f7b5032ac22529).
## jsonschema ## jsonschema

View File

@@ -387,6 +387,14 @@ the actual UTC publication date; if new version names are needed, retain the
validated contents and update PromptKit's pins/checksums before its release. validated contents and update PromptKit's pins/checksums before its release.
Publication and public module availability are not sprint completion gates. Publication and public module availability are not sprint completion gates.
**Completed: 2026-10-13.** Adopted the local OpenRouter candidate
`v3.20261013.0` at `2a69672b1bb220f1a730153341470f5ac67e15f4` and RakestrawHome
candidate `v3.20261013.0` at `d40a8aad50111c15d279469170f7b5032ac22529`. Validation passed
through a temporary filesystem module proxy: focused catalog/configuration
tests, `go test ./...`, `go vet ./...`, `go mod verify`, exact module identity
and version checks with no replacements, and `git diff --check`. No workspace or
proxy artifacts were committed; the candidate tags remain local and unpublished.
## Stage 7: Capture Destination-Specific HTTP Evidence ## Stage 7: Capture Destination-Specific HTTP Evidence
Scope: shared transport helpers in `internal/llm`, independent of generation. Scope: shared transport helpers in `internal/llm`, independent of generation.

4
go.mod
View File

@@ -4,8 +4,8 @@ go 1.26.0
require ( require (
gitea.maximumdirect.net/eric/ConfigKit v0.7.1 gitea.maximumdirect.net/eric/ConfigKit v0.7.1
gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20260930.0 gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20261013.0
gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20260930.0 gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20261013.0
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
) )

8
go.sum
View File

@@ -2,10 +2,10 @@ gitea.maximumdirect.net/eric/ConfigKit v0.7.1 h1:q3HrX4WWCPt1WfMydqFEaAmCf9s6Dq+
gitea.maximumdirect.net/eric/ConfigKit v0.7.1/go.mod h1:C82sbyKHYMV1OwaD2GJanFrwTfcZfjlW2JsGze5b0kA= gitea.maximumdirect.net/eric/ConfigKit v0.7.1/go.mod h1:C82sbyKHYMV1OwaD2GJanFrwTfcZfjlW2JsGze5b0kA=
gitea.maximumdirect.net/eric/ReleaseKit v0.4.1 h1:Qn+mdebYOzCVCEXgCbuGSO/WHmJtItwaQ8e3XwY3qtI= gitea.maximumdirect.net/eric/ReleaseKit v0.4.1 h1:Qn+mdebYOzCVCEXgCbuGSO/WHmJtItwaQ8e3XwY3qtI=
gitea.maximumdirect.net/eric/ReleaseKit v0.4.1/go.mod h1:LVodqNQ3OIKv9NBq+fFeyMByd1lHY25YOmmpah/NaNI= gitea.maximumdirect.net/eric/ReleaseKit v0.4.1/go.mod h1:LVodqNQ3OIKv9NBq+fFeyMByd1lHY25YOmmpah/NaNI=
gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20260930.0 h1:lzfCDbzJQRGzIlRPRprnAV9hVVL5zUQy80VMQ0kbYa0= gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20261013.0 h1:zhqxVDpQETGzCxYMsVGSWQcjsG4Xw+ftjEL/rCeh0GY=
gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20260930.0/go.mod h1:HjS0f+3q0IdHCTEz+VVAEgIwIWJFAZUjuKdAtvtqKdg= gitea.maximumdirect.net/eric/promptkit-backend-openrouter/v3 v3.20261013.0/go.mod h1:HjS0f+3q0IdHCTEz+VVAEgIwIWJFAZUjuKdAtvtqKdg=
gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20260930.0 h1:h12ZTRldAmpLAomj0oQRGteFxHLN1LPE6XDl9zJNbm8= gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20261013.0 h1:J10u3x+/siHz5ASC+Is4rfYA/ohW6colBT/8OuCA4qQ=
gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20260930.0/go.mod h1:OEFBeKdjTsLzqJwLmXI2O5gG3r64FktcVJVb3mBrRfg= gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome/v3 v3.20261013.0/go.mod h1:OEFBeKdjTsLzqJwLmXI2O5gG3r64FktcVJVb3mBrRfg=
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=

View File

@@ -26,6 +26,16 @@ func Underlays() ([]configkit.Underlay, error) {
return nil, err return nil, err
} }
catalogInputs := append(openrouterInputs, rakestrawhomeInputs...) catalogInputs := append(openrouterInputs, rakestrawhomeInputs...)
openrouterSmokeTestInputs, err := assetInputs("OpenRouter smoke-test catalog", openrouter.FS(), openrouter.SmokeTestsRoot)
if err != nil {
return nil, err
}
rakestrawhomeSmokeTestInputs, err := assetInputs("Rakestrawhome smoke-test catalog", rakestrawhome.FS(), rakestrawhome.SmokeTestsRoot)
if err != nil {
return nil, err
}
catalogInputs = append(catalogInputs, openrouterSmokeTestInputs...)
catalogInputs = append(catalogInputs, rakestrawhomeSmokeTestInputs...)
owned := configkit.Input{Source: configkit.Mapping("PromptKit-owned profiles", map[string]any{ owned := configkit.Input{Source: configkit.Mapping("PromptKit-owned profiles", map[string]any{
"profiles": map[string]any{ "profiles": map[string]any{
"promptkit-openrouter-standard": map[string]any{"extends": "gemini-flash-latest"}, "promptkit-openrouter-standard": map[string]any{"extends": "gemini-flash-latest"},

View File

@@ -9,7 +9,7 @@ import (
"gitea.maximumdirect.net/eric/promptkit/internal/configuration" "gitea.maximumdirect.net/eric/promptkit/internal/configuration"
) )
func TestPublishedCatalogsResolveThroughEffectiveConfiguration(t *testing.T) { func TestSelectedCatalogsResolveThroughEffectiveConfiguration(t *testing.T) {
underlays, err := Underlays() underlays, err := Underlays()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@@ -22,10 +22,22 @@ func TestPublishedCatalogsResolveThroughEffectiveConfiguration(t *testing.T) {
if err != nil || openrouter.Endpoint != "https://openrouter.ai/api/v1" || openrouter.ConcurrencyLimit != 16 || openrouter.QueueCapacity != 1024 { if err != nil || openrouter.Endpoint != "https://openrouter.ai/api/v1" || openrouter.ConcurrencyLimit != 16 || openrouter.QueueCapacity != 1024 {
t.Fatalf("OpenRouter backend: %+v, %v", openrouter, err) t.Fatalf("OpenRouter backend: %+v, %v", openrouter, err)
} }
if openrouter.SmokeTests == nil || openrouter.SmokeTests.DefaultProfile == nil ||
*openrouter.SmokeTests.DefaultProfile != "promptkit-openrouter-standard" ||
openrouter.SmokeTests.Authentication == nil || openrouter.SmokeTests.Authentication.Kind == nil ||
*openrouter.SmokeTests.Authentication.Kind != "openrouter_key" {
t.Fatalf("OpenRouter smoke-test defaults: %+v", openrouter.SmokeTests)
}
rakestrawhome, err := state.GetBackend("rakestrawhome") rakestrawhome, err := state.GetBackend("rakestrawhome")
if err != nil || rakestrawhome.Endpoint != "https://inference.ai.rakestrawhome.com/v1" || rakestrawhome.ConcurrencyLimit != 4 { if err != nil || rakestrawhome.Endpoint != "https://inference.ai.rakestrawhome.com/v1" || rakestrawhome.ConcurrencyLimit != 4 {
t.Fatalf("Rakestrawhome backend: %+v, %v", rakestrawhome, err) t.Fatalf("Rakestrawhome backend: %+v, %v", rakestrawhome, err)
} }
if rakestrawhome.SmokeTests == nil || rakestrawhome.SmokeTests.DefaultProfile == nil ||
*rakestrawhome.SmokeTests.DefaultProfile != "rakestrawhome-gemma-4-31b" ||
rakestrawhome.SmokeTests.Authentication == nil || rakestrawhome.SmokeTests.Authentication.Kind == nil ||
*rakestrawhome.SmokeTests.Authentication.Kind != "none" {
t.Fatalf("Rakestrawhome smoke-test defaults: %+v", rakestrawhome.SmokeTests)
}
for id, want := range map[string]string{ for id, want := range map[string]string{
"promptkit-openrouter-standard": "~google/gemini-flash-latest", "promptkit-openrouter-standard": "~google/gemini-flash-latest",
"promptkit-openrouter-auto": "openrouter/auto", "promptkit-openrouter-auto": "openrouter/auto",
@@ -38,6 +50,42 @@ func TestPublishedCatalogsResolveThroughEffectiveConfiguration(t *testing.T) {
} }
} }
func TestConsumerCanReplaceOrClearSmokeTestDefaults(t *testing.T) {
underlays, err := Underlays()
if err != nil {
t.Fatal(err)
}
replacement := configkit.Input{Source: configkit.Mapping("operator replacement", map[string]any{
"backends": map[string]any{"openrouter": map[string]any{
"smoke_tests": map[string]any{
"default_profile": "operator-profile",
"authentication": nil,
},
}},
})}
state, err := configuration.Load(replacement, underlays)
if err != nil {
t.Fatalf("load replacement: %v", err)
}
backend, err := state.GetBackend("openrouter")
if err != nil || backend.SmokeTests == nil || backend.SmokeTests.DefaultProfile == nil ||
*backend.SmokeTests.DefaultProfile != "operator-profile" || backend.SmokeTests.Authentication != nil {
t.Fatalf("caller smoke-test replacement/null was not effective: %+v, %v", backend.SmokeTests, err)
}
cleared := configkit.Input{Source: configkit.Mapping("operator null", map[string]any{
"backends": map[string]any{"openrouter": map[string]any{"smoke_tests": nil}},
})}
state, err = configuration.Load(cleared, underlays)
if err != nil {
t.Fatalf("load null smoke_tests: %v", err)
}
backend, err = state.GetBackend("openrouter")
if err != nil || backend.SmokeTests != nil {
t.Fatalf("caller null did not clear smoke-test defaults: %+v, %v", backend.SmokeTests, err)
}
}
func TestConsumerOverlayReplacesCatalogDefaultsBeforeValidation(t *testing.T) { func TestConsumerOverlayReplacesCatalogDefaultsBeforeValidation(t *testing.T) {
underlays, err := Underlays() underlays, err := Underlays()
if err != nil { if err != nil {