Implemented a new internal/danglers package with deterministic two-pass dangling-end then dangling-start resolution

This commit is contained in:
2026-04-28 15:38:16 -05:00
parent 47b6727973
commit f1ce35dfc3
8 changed files with 602 additions and 8 deletions

View File

@@ -9,6 +9,7 @@ import (
"gitea.maximumdirect.net/eric/seriatim/internal/backchannel"
"gitea.maximumdirect.net/eric/seriatim/internal/coalesce"
"gitea.maximumdirect.net/eric/seriatim/internal/config"
"gitea.maximumdirect.net/eric/seriatim/internal/danglers"
"gitea.maximumdirect.net/eric/seriatim/internal/filler"
"gitea.maximumdirect.net/eric/seriatim/internal/model"
"gitea.maximumdirect.net/eric/seriatim/internal/overlap"
@@ -169,6 +170,27 @@ func (coalescePostprocessor) Process(ctx context.Context, in model.MergedTranscr
}, nil
}
type resolveDanglersPostprocessor struct{}
func (resolveDanglersPostprocessor) Name() string {
return "resolve-danglers"
}
func (resolveDanglersPostprocessor) Process(ctx context.Context, in model.MergedTranscript, cfg config.Config) (model.MergedTranscript, []report.Event, error) {
if err := ctx.Err(); err != nil {
return model.MergedTranscript{}, nil, err
}
out, summary := danglers.Apply(in)
return out, []report.Event{
report.Info(
"postprocessing",
"resolve-danglers",
fmt.Sprintf("merged %d dangling segment(s) into %d target segment(s)", summary.DanglersMerged, summary.TargetsChanged),
),
}, nil
}
type autocorrectPostprocessor struct{}
func (autocorrectPostprocessor) Name() string {