Preserve public error categories from collaborators

This commit is contained in:
2026-07-28 01:20:41 +00:00
parent 4d7e1327ad
commit c0d4ea0d4e
2 changed files with 26 additions and 25 deletions

View File

@@ -915,6 +915,12 @@ func TestArtifactReaderFailuresPreserveArtifactLoadErrors(t *testing.T) {
}},
wantNested: context.Canceled,
},
{
name: "public reader error",
ctx: context.Background(),
reader: &recordingArtifactReader{err: scriptorium.ErrInvalidRequest},
wantNested: scriptorium.ErrInvalidRequest,
},
}
for _, tc := range tests {
@@ -936,6 +942,26 @@ func TestArtifactReaderFailuresPreserveArtifactLoadErrors(t *testing.T) {
}
}
func TestRunAddsLLMGenerateToCollaboratorPublicError(t *testing.T) {
engine := newContractEngineWithOptions(t, frameworkSchemaDir,
scriptorium.WithLLMClient(&fakeLLMClient{err: scriptorium.ErrArtifactLoad}),
)
_, err := engine.Run(context.Background(), scriptorium.RunRequest{
PromptID: frameworkMarkdownSummaryPromptID,
Inputs: map[string]scriptorium.ArtifactRef{
"transcript": scriptorium.Inline("Rin opens the gate."),
"glossary": scriptorium.Inline("gate: A guarded passage."),
},
})
if !errors.Is(err, scriptorium.ErrLLMGenerate) {
t.Fatalf("expected ErrLLMGenerate, got %v", err)
}
if !errors.Is(err, scriptorium.ErrArtifactLoad) {
t.Fatalf("expected preserved ErrArtifactLoad, got %v", err)
}
}
func TestPrepareWithoutProfileMatchesSpecificPublicError(t *testing.T) {
promptDir := t.TempDir()
writePublicPromptFile(t, promptDir, "profile-required", "")

View File

@@ -13,9 +13,6 @@ func mapPublicError(err error) error {
if err == nil {
return nil
}
if hasPublicError(err) {
return err
}
publicErr := publicErrorFor(err)
if publicErr == nil {
return err
@@ -23,28 +20,6 @@ func mapPublicError(err error) error {
return fmt.Errorf("%w: %w", publicErr, err)
}
func hasPublicError(err error) bool {
for _, publicErr := range []error{
ErrInvalidConfig,
ErrInvalidRequest,
ErrPromptNotFound,
ErrProfileNotFound,
ErrProfileRequired,
ErrPromptLoad,
ErrProfileLoad,
ErrAPIKeyEnvMissing,
ErrArtifactLoad,
ErrPromptRender,
ErrLLMGenerate,
ErrValidation,
} {
if errors.Is(err, publicErr) {
return true
}
}
return false
}
func publicErrorFor(err error) error {
switch {
case errors.Is(err, promptdef.ErrPromptDefinitionNotFound):