Record the one clause of FR-PLG-8 that is built, and say what it is short of

FR-PLG-8 reads as unbuilt, and most of it is: no aggregated missing-plugin
notice, no catalog-wide view, no export gate, no mark on an image whose
operation is unavailable. But its opening sentence is a claim about existing
behaviour — "the sidecar already preserves lines it does not understand
verbatim and writes them back untouched" — and it goes on to say that property
"is now load-bearing and shall be treated as such".

Two tests treat it as such, and neither was tagged. `sidecar.rs` keeps an
unknown operation across a parse-and-write, and keeps it out of the edit graph
so that preserving it is safe rather than merely tidy. Both would fail if the
verbatim path were removed, which is what CONTRIBUTING.md asks a tag to mean.

The tag sits on the two tests rather than on the module, so the matrix points
at the clause that is closed rather than at the requirement as a whole.

It is still short of the requirement's own acceptance criterion, and the tag
comment says so: FR-PLG-8 asks that a sidecar written with a plugin, opened and
saved without it, be byte-identical to the original, and the test asserts
`contains`. Both halves exist separately — `writing_the_same_state_twice_is_byte_identical`
proves byte identity for content this build understands — and nothing joins
them into the single claim the requirement makes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-30 10:20:22 +02:00
co-authored by Claude Opus 5
parent e22945a62d
commit 99563b33f7
+25
View File
@@ -1727,6 +1727,24 @@ mod tests {
assert!(!restored.is_neutral());
}
/// TRACES: FR-PLG-8
/// FR-PLG-8's preservation clause, and only that clause.
///
/// The requirement opens by saying the sidecar "already preserves lines it
/// does not understand verbatim and writes them back untouched", and that
/// the property "is now load-bearing and shall be treated as such". This is
/// the test that makes it load-bearing rather than incidental.
///
/// **It is weaker than the requirement's stated acceptance criterion**,
/// which is that the re-saved file be *byte-identical* to the original.
/// This asserts `contains`. The two halves of that criterion exist
/// separately — `writing_the_same_state_twice_is_byte_identical` proves
/// byte identity for content this build understands, and this proves
/// survival for content it does not — and nothing yet joins them into the
/// one claim FR-PLG-8 makes. Everything else the requirement asks for
/// (aggregated alerts, the export gate, rendering without rather than
/// guessing) is unbuilt, which is why the tag is on these two tests and
/// not on the module.
#[test]
fn an_unknown_operation_survives_a_round_trip() {
// The data-loss case that matters: a device running an older build
@@ -1742,6 +1760,13 @@ mod tests {
);
}
/// TRACES: FR-PLG-8
/// The other half of preservation: kept in the file, kept out of the edit.
///
/// "Render without, never render a guess" is a separate clause, and this is
/// not it — that one is about a *recognised* operation whose plugin is
/// missing. This is the narrower claim that an unparsed line cannot reach
/// the graph by accident, which is what makes preserving it safe.
#[test]
fn an_unknown_operation_does_not_reach_the_graph() {
let text = "drsc 1\n\n[version u1]\nname = Default\nrevision = 1\nmodified = 0\n\