Add Notarius configuration and extraction source policy

This commit is contained in:
2026-08-09 23:30:32 +00:00
parent 951383226c
commit 98734644d6
15 changed files with 678 additions and 30 deletions

View File

@@ -144,6 +144,22 @@ func ConfiguredArtifactName(source string) (string, bool) {
return artifactpolicy.ParseConfiguredSource(source)
}
// ExtractionArtifactSourceID returns narratio.extraction.<name> for a configured key.
func ExtractionArtifactSourceID(key string) string {
return artifactpolicy.ExtractionSourceID(key)
}
// IsExtractionArtifactSource reports whether source is narratio.extraction.<name>.
func IsExtractionArtifactSource(source string) bool {
_, ok := artifactpolicy.ParseExtractionSource(source)
return ok
}
// ExtractionArtifactName extracts <name> from narratio.extraction.<name>.
func ExtractionArtifactName(source string) (string, bool) {
return artifactpolicy.ParseExtractionSource(source)
}
// IsPreviousSessionArtifactSource returns true when source is narratio.previous_session.artifact.<name>.
func IsPreviousSessionArtifactSource(source string) bool {
_, ok := artifactpolicy.ParsePreviousSessionSource(source)

View File

@@ -150,6 +150,23 @@ func TestPreviousSessionArtifactSourceHelpers(t *testing.T) {
}
}
func TestExtractionArtifactSourceHelpers(t *testing.T) {
if got := ExtractionArtifactSourceID("npc_registry"); got != "narratio.extraction.npc_registry" {
t.Fatalf("ExtractionArtifactSourceID() = %q", got)
}
if !IsExtractionArtifactSource(" narratio.extraction.npc_registry ") {
t.Fatal("IsExtractionArtifactSource(valid) = false")
}
if key, ok := ExtractionArtifactName("narratio.extraction.npc_registry"); !ok || key != "npc_registry" {
t.Fatalf("ExtractionArtifactName() = %q, %t", key, ok)
}
for _, source := range []string{"narratio.extraction.", "narratio.extraction.npc-registry", "narratio.artifact.npc_registry"} {
if IsExtractionArtifactSource(source) {
t.Fatalf("IsExtractionArtifactSource(%q) = true, want false", source)
}
}
}
func TestResolveSessionArtifactPrefersManifestOutput(t *testing.T) {
workspace := t.TempDir()
paths := buildSessionPaths(workspace, "campaign", "session")