diff --git a/docs/integrations/pkg-promptkit.md b/docs/integrations/pkg-promptkit.md index 2091b024..30e5b17a 100644 --- a/docs/integrations/pkg-promptkit.md +++ b/docs/integrations/pkg-promptkit.md @@ -1,11 +1,11 @@ # PromptKit Integration Notarius pins -[`gitea.maximumdirect.net/eric/promptkit` v0.8.0](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.8.0) +[`gitea.maximumdirect.net/eric/promptkit` v0.9.0](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.9.0) as its in-process prompt engine. The upstream -[Go package consumer guide](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.8.0/docs/consumers/pkg-promptkit.md) +[Go package consumer guide](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.9.0/docs/consumers/pkg-promptkit.md) owns the public engine API, and the upstream -[format reference](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.8.0/docs/formats.md) +[format reference](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.9.0/docs/formats.md) owns prompt, profile, and schema file contracts. ## Supported Boundary @@ -26,7 +26,7 @@ Notarius relies on the root `promptkit` package to: admission exhaustion through `ErrCapacityExceeded`. The pinned -[`BackendLocal`, `LocalBackend`, and `WithBackend` API](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.8.0/backends.go) +[`BackendLocal`, `LocalBackend`, and `WithBackend` API](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.9.0/backends.go) owns the registration and backend-capacity contract. For one completion, the adapter calls `PrepareExecution`, takes a @@ -52,7 +52,7 @@ Notarius sends one stable effective session through PromptKit's direct session field, which is authoritative for provider session behavior. It also retains the same value as the `session_id` prompt variable for maintained prompt compatibility. The generated identifier is 76 ASCII characters, within -PromptKit v0.8.0's 256-code-point session limit. Session IDs are non-secret +PromptKit v0.9.0's 256-code-point session limit. Session IDs are non-secret correlation identifiers and may be exposed to providers and provider observability. The CLI contract owns generation and override behavior. @@ -85,12 +85,21 @@ configuration and deployment workflow are defined in [Operations](../operations.md#promptkit-profile-deployment). PromptKit owns `base_profile` resolution under its -[pinned format rules](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.8.0/docs/formats.md). +[pinned format rules](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.9.0/docs/formats.md). Notarius records the selected leaf identity and resolved target without parsing or merging inheritance. An unset filesystem `api_key_env` is optional and may reach the provider without authorization, which can result in a 401 or 403. -Notarius supports this boundary against PromptKit v0.8.0. Its fallback source, +PromptKit v0.9.0 accepts only the `developer`, `system`, `user`, and +`assistant` text-chat roles after normalizing case and surrounding whitespace. +Maintained Notarius prompt definitions use only `system` and `user`. + +PromptKit now obtains its maintained OpenRouter and Rakestrawhome backend and +profile catalogs from independently versioned transitive modules. Notarius +does not import or register either catalog; PromptKit retains catalog source, +identity, precedence, credential, and capacity ownership. + +Notarius supports this boundary against PromptKit v0.9.0. Its fallback source, prepared-execution, inspection, and typed capacity APIs are used as public upstream contracts; other PromptKit APIs or file-format behavior are not implicitly supported. A dependency upgrade requires reviewing the adapter, diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 54b0600d..2bc78eb5 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -112,7 +112,7 @@ open for redesign: rejection accept `fail_run` or `reject_output`; validator failure accepts `warn_continue` or `fail_run`. -## Stage 1 — Adopt PromptKit v0.9.0 +## Stage 1 ✅ — Adopt PromptKit v0.9.0 ### Goal diff --git a/go.mod b/go.mod index c55f25b1..7e119c36 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,14 @@ module gitea.maximumdirect.net/eric/notarius go 1.25.5 require ( - gitea.maximumdirect.net/eric/promptkit v0.8.0 + gitea.maximumdirect.net/eric/promptkit v0.9.0 github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 gopkg.in/yaml.v3 v3.0.1 ) require golang.org/x/text v0.40.0 + +require ( + gitea.maximumdirect.net/eric/promptkit-backend-openrouter v1.0.0 // indirect + gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome v1.0.0 // indirect +) diff --git a/go.sum b/go.sum index 02bbdff2..3b7465da 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,9 @@ -gitea.maximumdirect.net/eric/promptkit v0.8.0 h1:NGd9hDLu0UMxKbvittMrqM5Ua94eFb+kOE7UIir8l08= -gitea.maximumdirect.net/eric/promptkit v0.8.0/go.mod h1:R95NM6fbMDGDC0/UomgnSBP6ui2ns+8SZb8bESNvrDQ= +gitea.maximumdirect.net/eric/promptkit v0.9.0 h1:IpvDRC8L6xRxQ9hpuyKOmMc5b6MeLTKYyx+h1YAjy08= +gitea.maximumdirect.net/eric/promptkit v0.9.0/go.mod h1:oMJ/WUJImUtwJ5e+6MAGECPYAErAkOaKel0G+3T/b4E= +gitea.maximumdirect.net/eric/promptkit-backend-openrouter v1.0.0 h1:lc062euk2qseO//D762i3JaFyulDNML3eQQX7DkYTho= +gitea.maximumdirect.net/eric/promptkit-backend-openrouter v1.0.0/go.mod h1:AIa7kAu2mfrRQgcspe4L+DW51WqgnALQT60lqkEywJI= +gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome v1.0.0 h1:j9YY7wsTVjzke2kHH4YAzpU0oUpM+x+nXwl1IeS+2eg= +gitea.maximumdirect.net/eric/promptkit-backend-rakestrawhome v1.0.0/go.mod h1:4RNS+LILDg4JbS4Ts9Lwy1C92wauXJIbeQaalps4Koo= 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/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= diff --git a/internal/cli/production_contract_test.go b/internal/cli/production_contract_test.go index 0f9942ae..4d6003a5 100644 --- a/internal/cli/production_contract_test.go +++ b/internal/cli/production_contract_test.go @@ -343,6 +343,9 @@ func TestProductionPromptAssetsPrepareWithoutProviderCredentials(t *testing.T) { Inputs []struct { Name string `yaml:"name"` } `yaml:"inputs"` + Messages []struct { + Role string `yaml:"role"` + } `yaml:"messages"` } preparedPrompts := 0 if err := fs.WalkDir(promptFS, ".", func(path string, entry fs.DirEntry, walkErr error) error { @@ -360,6 +363,11 @@ func TestProductionPromptAssetsPrepareWithoutProviderCredentials(t *testing.T) { if err := yaml.Unmarshal(data, &prompt); err != nil { return err } + for _, message := range prompt.Messages { + if message.Role != promptkit.RoleSystem && message.Role != promptkit.RoleUser { + return fmt.Errorf("production prompt %q uses role %q, want system or user", prompt.ID, message.Role) + } + } inputs := make(map[string]promptkit.ArtifactRef, len(prompt.Inputs)) for _, input := range prompt.Inputs { inputs[input.Name] = promptkit.Inline(`{}`) diff --git a/internal/framework/llm/promptkit_profile_fingerprint.go b/internal/framework/llm/promptkit_profile_fingerprint.go index e13f6720..08f7d0ee 100644 --- a/internal/framework/llm/promptkit_profile_fingerprint.go +++ b/internal/framework/llm/promptkit_profile_fingerprint.go @@ -17,7 +17,7 @@ const ( promptKitLocalBackendMarker = "notarius:promptkit-local-backend:v1" // The built-in profile catalog is compiled into this pinned PromptKit // release. Update this identity when the dependency is upgraded. - promptKitBuiltinProfileCatalogID = "promptkit:v0.8.0:builtin-profiles" + promptKitBuiltinProfileCatalogID = "promptkit:v0.9.0:builtin-profiles" ) func promptKitProfileFingerprint(profileDir, profileFile, fallbackProfileDigest string) (CheckpointFingerprint, error) {