suite check: направление ссылок внутри темы проверяется во всём документе

- ссылка на слой своей темы с объявленной осью — ошибка где угодно, а не только
  в норме: гарантированно присутствует в копии один базовый слой
- ссылки на чужую тему вне нормы остаются разрешёнными по META-20
This commit is contained in:
av
2026-07-27 10:27:30 +03:00
parent 51d2050200
commit 709157237d
2 changed files with 82 additions and 20 deletions
+37 -2
View File
@@ -160,7 +160,22 @@ func TestLayeredChecks(t *testing.T) {
"**ДОЛЖЕН.** Момент времени записывается с суффиксом Z.",
"**ДОЛЖЕН.** Момент времени записывается с суффиксом Z, как требует GTIM-1.", 1)
},
want: "a layer of its own topic but not the base one",
want: "points at a layer of this topic that is not the base one",
}, {
name: "rationale of the base layer references a layer above it",
setup: func(f files) {
f["conventions/arch/time.md"] = strings.Replace(archTime,
"**ПОЧЕМУ.** Без явного смещения не видно, в какой зоне запись сделана.",
"**ПОЧЕМУ.** Без явного смещения не видно зоны; в Go это выражает GTIM-1.", 1)
},
want: "points at a layer of this topic that is not the base one",
}, {
name: "a section outside any rule references a layer above",
setup: func(f files) {
f["conventions/arch/time.md"] = archTime +
"\n## Связано\n\nРеализация на Go — GTIM-1.\n"
},
want: "points at a layer of this topic that is not the base one",
}}
for _, tc := range cases {
@@ -220,7 +235,7 @@ func TestNoFalsePositives(t *testing.T) {
name: "a stub of a retired rule with a date and a reason",
setup: func(f files) {
f["conventions/arch/time.md"] = archTime +
"\n### TIME-2. Ширина строки фиксируется\n\n**СНЯТО 2026-07-26.** Правило переехало в GTIM-1.\n"
"\n### TIME-2. Ширина строки фиксируется\n\n**СНЯТО 2026-07-26.** Ширина следует из TIME-1 и отдельного правила не требует.\n"
},
}, {
name: "a scenario block in the suite's own vocabulary",
@@ -235,6 +250,26 @@ func TestNoFalsePositives(t *testing.T) {
"**ПОЧЕМУ.** Без явного смещения не видно, в какой зоне запись сделана.",
"**ПОЧЕМУ.** Условие `WHERE a AND b OR c` сортировку не спасает.", 1)
},
}, {
name: "a rationale references a foreign topic, which META-20 allows",
setup: func(f files) {
f["conventions/lang/go/time.md"] = strings.Replace(goTime,
"**ПОЧЕМУ.** Единая точка даёт гарантированный UTC.",
"**ПОЧЕМУ.** Единая точка даёт гарантированный UTC; тот же довод стоит за SLOG-1.", 1)
},
}, {
name: "a section outside any rule references a foreign topic",
setup: func(f files) {
f["conventions/lang/go/time.md"] = goTime +
"\n## Связано\n\nКонвенция logging, правило SLOG-1.\n"
},
}, {
name: "a layer references the base layer of its topic outside a norm",
setup: func(f files) {
f["conventions/lang/go/time.md"] = strings.Replace(goTime,
"**ПОЧЕМУ.** Единая точка даёт гарантированный UTC.",
"**ПОЧЕМУ.** Единая точка даёт гарантированный UTC, чего и требует TIME-1.", 1)
},
}, {
name: "the single document without a topic is the one the suite governs itself by",
setup: func(f files) {