Review round on #568 found the branch changed builtIn identity from a bare filename comparison to the full seeded path (GraphicsElementDefaults. OnNowNextSeededPath) but left several places still asserting the old rule: - docs/decisions/records/graphics/channel-level-attachment.md and on-now-next-on-by-default.md (both status: active) still described a filename-only match; corrected in place and cross-referenced. - docs/api-conventions.md §8 quoted the retired `Path.GetFileName(element.Path) == OnNowNextFileName` expression verbatim; replaced with the current OnNowNextSeededPath comparison and a note on the UpdateChannelHandler 422 hardening. - Three in-code comments (GraphicsElementDefaults.cs, GraphicsElementSeeder.cs, ChannelGraphicsDefaults.cs) still said "identity is the filename". - docs/graphics-elements.md's mutation-coverage table (row 10, row 18) named clauses that no longer exist or no longer redden any test post-#568; re-measured directly (removing the seeded-path check reddens Ignores_A_Non_Built_In_Element_With_A_Different_Filename and Ignores_A_Same_Named_Same_Kind_Element_Outside_The_Seeded_Folder; removing the Kind==Text filter alone reddens nothing, so it moves to the "known clauses with no red" list with that measurement dated). Also closed the should-fix twin: UpdateDecoHandler's graphicsElementIds and watermarkIds are top-level ReplaceDecoRequest fields in the same position as UpdateChannelRequest.graphicsElementIds (not the deep-FK-in-a-nested-list carve-out), and the reconcile in ApplyUpdateRequest blindly Added a join row for any incoming id -- the identical FK-constraint-to-500 defect #568 fixed on the channel path. Added GraphicsElementIdsMustExist/WatermarkIdsMustExist validators mirroring UpdateChannelHandler's, pinned by UpdateDecoGraphicsElementsTests (reddens when either validator alone is removed -- verified). Decisions-Edit: yes Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QqCpYFsKgnAnx6jVwrKiV
24 lines
1.3 KiB
C#
24 lines
1.3 KiB
C#
using System.IO;
|
|
|
|
namespace ErsatzTV.Core.Graphics;
|
|
|
|
public static class GraphicsElementDefaults
|
|
{
|
|
// Built-in "On Now / Next" text element filename -- a component of OnNowNextSeededPath below,
|
|
// never itself an identity check (a filename-only comparison is case-sensitive-by-accident and
|
|
// folder-agnostic; see OnNowNextSeededPath, #568).
|
|
public const string OnNowNextFileName = "on-now-next.yml";
|
|
|
|
// Display name only. Never use it for identity -- that is OnNowNextSeededPath below (#67 / #74 / #568).
|
|
public const string OnNowNextName = "On Now / Next";
|
|
|
|
// The full path the seeder writes the built-in template to. A `builtIn` discriminator must
|
|
// match THIS, not `Path.GetFileName(...) == OnNowNextFileName` -- a filename-only comparison is
|
|
// case-sensitive-by-accident and folder-agnostic: a user element named exactly `on-now-next.yml`
|
|
// in any of the other four template folders (image/motion/subtitle/script) would also report
|
|
// `builtIn:true` (#568). `Kind == Text` alone does not close this either, since a second text
|
|
// template could share the filename in principle.
|
|
public static string OnNowNextSeededPath =>
|
|
Path.Combine(FileSystemLayout.GraphicsElementsTextTemplatesFolder, OnNowNextFileName);
|
|
}
|