From a68e8e31a40bb1b6e4679cdbc73198c6e1124e7a Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Sat, 29 Aug 2026 15:49:36 +0000 Subject: [PATCH] Complete Notarius reference compatibility audit --- docs/roadmap/implementation.md | 2 +- internal/stage/prepare.go | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index ad54e7d..e0b964c 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -23,7 +23,7 @@ different contract. | 5 | Resolve references in extract and bind fingerprints, resume, and metadata to their identities. | Completed | | 6 | Prove assembled extraction lifecycle and downstream invalidation behavior. | Completed | | 7 | Update canonical documentation and maintained examples for the completed feature. | Completed | -| 8 | Perform compatibility, quality, and repository-wide closure validation. | Pending | +| 8 | Perform compatibility, quality, and repository-wide closure validation. | Completed | ## Governing Decisions diff --git a/internal/stage/prepare.go b/internal/stage/prepare.go index beaaad2..ec6f33b 100644 --- a/internal/stage/prepare.go +++ b/internal/stage/prepare.go @@ -177,9 +177,24 @@ func (prepareStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S preparedConfigFiles := []preparedConfigFile{ {kind: "speakers", src: speakersSrc, dst: filepath.Join(paths.InputsDir, "speakers.yml"), source: speakersInput.Source}, {kind: "autocorrect", src: autocorrectSrc, dst: filepath.Join(paths.InputsDir, "autocorrect.yml"), source: autocorrectInput.Source}, - {kind: "glossary", src: glossarySrc, dst: filepath.Join(paths.InputsDir, "glossary.yml"), source: glossaryInput.Source}, - {kind: "players", src: playersSrc, dst: filepath.Join(paths.InputsDir, "players.yml"), source: playersInput.Source}, - {kind: "party", src: partySrc, dst: filepath.Join(paths.InputsDir, "party.yml"), source: partyInput.Source}, + } + for _, prepared := range []struct { + sourceID string + input config.ResolvedInputFile + src string + }{ + {sourceID: artifactpolicy.SourceInputGlossary, input: glossaryInput, src: glossarySrc}, + {sourceID: artifactpolicy.SourceInputPlayers, input: playersInput, src: playersSrc}, + {sourceID: artifactpolicy.SourceInputParty, input: partyInput, src: partySrc}, + } { + descriptor, ok := artifactpolicy.DescribePreparedInputSource(prepared.sourceID) + if !ok { + return nil, fmt.Errorf("prepare: prepared-input descriptor %q is unavailable", prepared.sourceID) + } + preparedConfigFiles = append(preparedConfigFiles, preparedConfigFile{ + kind: descriptor.ManifestKind, src: prepared.src, + dst: filepath.Join(paths.InputsDir, descriptor.Filename), source: prepared.input.Source, + }) } spellDescriptor, ok := artifactpolicy.DescribePreparedInputSource(artifactpolicy.SourceInputSpellCatalog) if !ok {