Complete session-only manifest migration
This commit is contained in:
@@ -142,7 +142,7 @@ func publishCleanupEligible(cfg *config.Config, m *manifest.Manifest, sr *manife
|
||||
return "", false, "publish stage was skipped"
|
||||
}
|
||||
if uploaded, _ := sr.Metadata["uploaded"].(bool); !uploaded {
|
||||
return "", false, "publish did not upload run record"
|
||||
return "", false, "publish did not complete an upload"
|
||||
}
|
||||
if strings.TrimSpace(asString(sr.Metadata["remote_commit_key"])) == "" {
|
||||
return "", false, "publish remote commit key is missing"
|
||||
|
||||
@@ -370,7 +370,6 @@ func TestPostPublishCleanupNotRunWhenOutputIsMissing(t *testing.T) {
|
||||
|
||||
assertExists(t, seed.spoolAudioDir)
|
||||
assertExists(t, seed.runWorkDir)
|
||||
assertExists(t, filepath.Join(seed.runWorkDir, "manifest.json"))
|
||||
assertExists(t, artifacts.SessionRunRootForCampaign(cfg.Pipeline.Workspace.Root, cfg.Session.Campaign, cfg.Session.SessionID, runID))
|
||||
}
|
||||
|
||||
@@ -467,7 +466,6 @@ func cleanupFixtureConfig(t *testing.T) (*config.Config, cleanupSeed) {
|
||||
"session_recap.md",
|
||||
)
|
||||
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "manifest.json"), "{}\n")
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "logs", "stage.log"), "log\n")
|
||||
mustWriteFile(t, filepath.Join(otherRunDir, "logs", "stage.log"), "other\n")
|
||||
mustWriteFile(t, filepath.Join(spoolAudioDir, "speaker.flac"), "flac\n")
|
||||
@@ -562,8 +560,6 @@ func writePublishFixtureRunFiles(t *testing.T, runWorkDir, sessionRoot string) {
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "polish", "reports", "audita.report.json"), "{}\n")
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "merge", "config", "seriatim.generated.yml"), "key: value\n")
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "logs", "audita.stderr.log"), "stderr\n")
|
||||
mustWriteFile(t, filepath.Join(runWorkDir, "manifest.json"), "{}\n")
|
||||
|
||||
mustWriteFile(t, filepath.Join(sessionRoot, "transcripts", "final.trimmed.json"), "{\"segments\":[]}\n")
|
||||
mustWriteFile(t, filepath.Join(sessionRoot, "artifacts", "session_recap.md"), "# recap\n")
|
||||
}
|
||||
|
||||
@@ -135,9 +135,6 @@ func TestRestoreThenRunStageForceAnalyzeUsesRestoredDurableState(t *testing.T) {
|
||||
if info, statErr := os.Stat(runRoot); statErr != nil || !info.IsDir() {
|
||||
t.Fatalf("run directory %q = %#v, %v; want directory", runRoot, info, statErr)
|
||||
}
|
||||
if _, statErr := os.Stat(filepath.Join(runRoot, "manifest.json")); !os.IsNotExist(statErr) {
|
||||
t.Fatalf("run manifest stat = %v, want not exist", statErr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRestoreThenAnalyzeUsesRestoredPreviousCacheWithoutObjectStore(t *testing.T) {
|
||||
|
||||
@@ -447,10 +447,9 @@ func persistPostPublishCleanupFailure(
|
||||
if sessionManifest != nil {
|
||||
sessionManifest.RecordFailure(nowUTC(), operationErr.Error())
|
||||
}
|
||||
// Do not rewrite the run manifest here: cleanup may have deliberately
|
||||
// removed the directory that contains it. The completed run record remains
|
||||
// the authoritative evidence of the remote publish; the session manifest
|
||||
// records the outstanding local cleanup for the next invocation.
|
||||
// Cleanup may have deliberately removed the selected run directory. The
|
||||
// committed remote snapshot remains authoritative, while the session
|
||||
// manifest records the outstanding local cleanup for the next invocation.
|
||||
sessionErr := sessionStore.Save(ctx, sessionManifestPath, sessionManifest)
|
||||
return errors.Join(operationErr, wrapTerminalPersistenceError("save terminal session manifest", sessionErr))
|
||||
}
|
||||
|
||||
@@ -854,9 +854,6 @@ func TestExecuteStagesCreatesRunDirectoryPerInvocation(t *testing.T) {
|
||||
if info, statErr := os.Stat(wantWorkDir); statErr != nil || !info.IsDir() {
|
||||
t.Fatalf("run directory %q = %#v, %v; want directory", wantWorkDir, info, statErr)
|
||||
}
|
||||
if _, statErr := os.Stat(filepath.Join(wantWorkDir, "manifest.json")); !os.IsNotExist(statErr) {
|
||||
t.Fatalf("run manifest stat = %v, want not exist", statErr)
|
||||
}
|
||||
}
|
||||
if sessionManifest.LocalWorkDir == artifacts.SessionRunRootForCampaign(cfg.Pipeline.Workspace.Root, cfg.Session.Campaign, cfg.Session.SessionID, run1.RunID) {
|
||||
t.Fatal("session manifest retained the prior invocation work directory")
|
||||
|
||||
@@ -413,8 +413,8 @@ func analyzeProducerRunID(execution analyzeExecutionContext) string {
|
||||
return runID
|
||||
}
|
||||
}
|
||||
// Direct stage callers predate invocation manifests. Application-owned
|
||||
// execution always supplies the actual run identity.
|
||||
// Direct stage callers use a stable synthetic ID. Application-owned execution
|
||||
// always supplies the actual run identity.
|
||||
return "direct-analyze"
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ func TestPublishFailsWhenPrerequisiteNotSucceeded(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishUploadsRunRecordPublishedOutputsAndCurrentPointer(t *testing.T) {
|
||||
func TestPublishUploadsRunFilesPublishedOutputsAndCurrentPointer(t *testing.T) {
|
||||
env, m, runRoot := publishFixture(t)
|
||||
fake := env.ObjectStore.(*storage.FakeBackend)
|
||||
lanePath := configurePublishExtractionFixture(t, env, m)
|
||||
|
||||
Reference in New Issue
Block a user