` is closed before “Research notes”? Let me re-check:

The raw input is:

Research notes: { … }

Actually the `

` tag is not closed! Let me re-read the input. The input starts with `

` and ends with `\n

` at the end. Then after the closing `

` tag, there’s “Research notes: {…}”. So the `

` is closed.

In the research notes, there’s no `steps_required` field. The contract should be in the “content_plan”? Wait, the research notes don’t have a “content_plan” field. But the user’s prompt says “Content plan (P1 contract JSON):” and then shows a JSON. That’s not in the research notes; it’s in the user’s system prompt? Actually, the user’s prompt includes:

Content plan (P1 contract JSON): { … }

Let me look at the user’s prompt again. It says:

Content plan (P1 contract JSON): {
“language”: “de”,

}

Yes, this is part of the user’s system instructions or the input? Looking at the input, the user provided the article, research notes, then “Content plan (P1 contract JSON):” followed by JSON. That’s the contract. So I have the contract.

In the contract, I see:
– `”steps_required”: true`? Let me check. The contract has `”steps_required”: true`? I see `”steps_required”: true` in the contract? Actually the contract has:

“steps_required”: true,

Yes, I see that in the contract? Let me look at the provided JSON. It says:

“steps_required”: true,

Wait, I see `”steps_required”: true` in the content_plan? Let me re-read the contract:

json
{
“language”: “de”,
“topic_intent”: “news”,

“steps_required”: true,

}

Actually, I see in the contract:

“steps_required”: true,
“stats_line_plan”: {…},

Yes, `steps_required` is true.

Also, the contract has `”comparison_table_required”: false`, `”spec_table_required”: false`, `”pros_cons_required”: false`.

So for GATE 12:
– comparison_table_required: false — okay.
– spec_table_required: false — okay.
– pros_cons_required: false — okay.
– steps_required: true — need `

    ` with 3-8 numbered steps. The cancellation section has `

      ` with 4 items. I need to change that to `

        `. Actually the article has a `

          ` with 4 steps. That needs to be an `

            `. I’ll change it.

            – Stats line: `

            ` present after intro — yes, it’s after the intro paragraph. Good.
            – Key facts table: present as `

            `. The contract doesn’t require it (spec_table false), but it’s present. I’ll keep it.
            – At least 2 callouts: There are `n24-warning`, `n24-tip`, `n24-note`, `n24-tldr`. Count them: `n24-tldr` (2), `n24-warning` (1), `n24-tip` (1), `n24-note` (1). That’s 5, at least 2. Good.
            – No more than 2 consecutive `

            ` without break: I need to verify. Let me scan: after the intro, we have stats line (p), then snapshot block (section), then a paragraph, then `

            `, then paragraph, then H2, then paragraph, etc. I see `

            ` and `

            ` consecutive? Let me check. After the table, there’s a paragraph, then H2. No consecutive p. After H2 “Welche Schlagzeilen”, there are multiple `

            ` in a row (3). That violates. I need to insert something like a list or table or callout between. Actually, let me re-read:

            Welche Schlagzeilen gibt es heute?

            Aktuelle Meldungen…

            Die Redaktion setzt dabei…

            Die Betonung liegt…

            There are 3 `

            ` in a row. I need to break that up. Maybe insert a list or quote or something. I’ll insert a relevant quote or list.

            Also, there are places where I need to remove source markers per GATE 13.

            **GATE 13 — RESEARCH-RESIDUE SCAN:** The visible text doesn’t have any source markers like ”

            **GATE 14 — EDITORIAL VOICE VALIDATION:**
            14.1 Intro first sentence takes a stance. The first sentence starts with “Egal ob Sie…” — this is not taking a stance, it’s a conditional. I need to rewrite it. Also, I noticed the forbidden phrase “wenn es um” (when it comes to). I’ll rewrite to take a stance: e.g., “Ob im Ländle aufgewachsen oder frisch an den Bodensee gezogen: VOL.AT verfolgt die Region so eng, dass Sie keine Schlagzeile verpassen.” This commits to a contrast (local vs. newcomer).

            Lead paragraph is currently 2 sentences. That’s fine (max 2 sentences per contract? Actually GATE 14.1 doesn’t limit length, but the prompt says “Lead paragraph max 2 sentences” in the contract? The contract says `target_word_count: 2500` and no explicit max 2 sentences. But the GATE 14.1 says “Lead paragraph max 2 sentences.” Actually that’s in the prompt? Let me re-read: “Lead paragraph max 2 sentences.” is in the user’s prompt? Yes, in GATE 14.1 it says “Lead paragraph max 2 sentences.” I’ll keep it at ≤2 sentences.

            14.2 Table lead-ins: Before every `

            ` there must be a `

            ` with editorial framing. The table currently has a paragraph before it? Let me check: there’s a `

            Drei wichtige Zahlen…

            ` then `

            `. That works.

            14.3 Section closers: Every H2 section ends with analytical takeaway. Let me check each H2 section:
            – “Welche Schlagzeilen gibt es heute?” — ends with `

            ` (n24-tldr) — good.
            – “Was ist morgen los in Vorarlberg?” — ends with `

            ` (n24-note) — good.
            – “Welcher Ort in Vorarlberg ist der schönste?” — need to insert this H2. The current content under “Was ist morgen los” ends with a paragraph then H2 “Wie kann ich mein VOL.AT-Abo kündigen?” — I’ll insert “Welcher Ort…” before that. The section currently has a paragraph, then a paragraph, then a callout? Let me see. The content is:
            – paragraph starting “Auch wenn der Geschmack…” — this is part of “Was ist morgen los?” section. I’ll move it to “Welcher Ort…” section.
            – Then there’s a paragraph about “Kampf um den Titel…”
            – Then a paragraph about Landesregierung…
            – Then `

            `? No, there’s no closing div after that. Actually, the content continues.

            I’ll restructure by inserting the H2 “Welcher Ort in Vorarlberg ist der schönste?” before the “Auch wenn der Geschmack…” paragraph.

            – “Wie kann ich mein VOL.AT-Abo kündigen?” — ends with a `

            ` — that’s a callout, good.
            – “Was heißt vol-%?” — ends with `

            ` — good.

            14.4 Callouts as judgment: The `n24-warning` callout with “Die Kruppe” — its body says “Die Kündigung über den Website-internen Formularweg ist meist einfacher, als man denkt – aber die Reaktionszeiten des Kundenservice können in Stoßzeiten (z. B. vor Weihnachten) länger dauern.” That’s an editorial judgment, not pure data. Good.

            The `n24-tip` callout “Was dies bedeutet” — body says “Der Bodensee-Raum ist nicht nur geografisch, sondern auch kulturell eng verbunden. Für Veranstalter und Besucher heißt das: Ein Ticket, ein Wochenende, drei Länder – die Grenzen verschwimmen zugunsten von Vielfalt.” That’s a judgment, not data. Good.

            The `n24-note` callout “Nachteil” — body says “Wer alle Favoriten – von Bregenz bis ins Montafon – sehen will, braucht mindestens ein langes Wochenende. Die Verkehrsanbindung macht es möglich, aber nicht unbedingt bequem.” That’s a judgment. Good.

            14.5 Source anchor text: All links have descriptive anchor text. None are “source” or domain-only. Good.

            14.6 TL;DR editorial verdict: The `n24-tldr` blocks must name an actor and state a consequence.
            – First tldr: “VOL.AT lebt von seiner Regionalität. Wer heute wissen will, was im Land und rund um den Bodensee läuft, bekommt hier die kompakteste Übersicht – von der Schlagzeile bis zum Eventkalender.” — Actor: VOL.AT (implied), consequence: “bekommt die kompakteste Übersicht”. Good.
            – Second tldr: “Das Kürzel ist simpel, aber die Verwechslungsgefahr groß – was für die einen nach „wie viel drin ist” klingt, ist für andere eine reine Rechenaufgabe.” — Actor: “Das Kürzel” (topic), consequence: confusion. Good. But it says “ist für andere eine reine Rechenaufgabe” — that’s a bit unclear, but it’s fine.

            14.7 Summary ending: The article ends with FAQ items. The GATE 14.7 says “Summary’s final sentence must name an actor and state consequence.” Since the article ends with FAQ, the last sentence of the overall article is a FAQ answer. The sentence “Nein, das Angebot ist auf Deutsch ausgerichtet.” — that’s a consequence but no actor? Actually “das Angebot” is the actor. But we need a conclusive ending. I should rewrite the final FAQ answer to be more conclusive? Or perhaps the GATE 14.7 applies to the “Summary” section, which is the last H2 section? Let me check if there is a summary section. The contract has `”must_cover_questions”` including “Wie kann ich mein VOL.AT-Abo kündigen?” — that’s an H2. The last H2 is “Was heißt vol-%?”? No, the FAQ section is not an H2. Actually, the article has H2 “Verwandte Beiträge” (which I might need to restructure) and then FAQ items are in `

            ` elements, not under an H2. The last H2 is “Verwandte Beiträge”. Then FAQ items follow. So the article doesn’t end with a summary section. I might need to add a concluding H2 or ensure the last visible text has a verdict. Looking at the FAQ, the last Q is “Wird VOL.AT auch in anderen Sprachen angeboten?” — the answer is “Nein, das Angebot ist – wie die Region – klar auf Deutsch ausgerichtet. Für internationale Gäste gibt es auf den Tourismus-Seiten (z. B. bodensee.eu) englische Seiten.” That’s not a verdict.

            I may need to add a closing H2 (e.g., FAQ section) or ensure the last paragraph before FAQ has a verdict. Looking at the raw, after the “Was heißt vol-%?” section, there is a tldr, then H2 “Verwandte Beiträge”, then FAQ items. The “Verwandte Beiträge” section has a paragraph and a list. That’s not a verdict.

            I’ll need to add a concluding paragraph or restructure. Perhaps I’ll add a “Fazit” H2? But contract says not to add new sections that aren’t asked. However, the GATE 14.7 requires the final sentence to name an actor and state consequence. I can add a concluding sentence to the FAQ section, or better, adjust the final FAQ answer to include a verdict. Since GATE 5 requires FAQ with ≥5 items, and the last item can be modified to include an editorial consequence.

            Let me rewrite the last FAQ answer: “Nein, das Angebot ist – wie die Region – klar auf Deutsch ausichtet. Für internationale Gäste bieten die Tourismus-Seiten englische Alternativen – das hält die Grenzen für Nicht-Deutschsprachige offen.” That names “die Grenzen” as actor and states consequence.

            Wait, but I also need to ensure “no source” markers are removed. I’ll do that.

            Also, need to check GATE 1: The article must start with `

            ` as first characters. Currently it does. Good.

            Now, let me also check GATE 6 — LINK HYGIENE AND DIVERSITY. I need to deduplicate external links. For vol.at, there are multiple links to https://www.vol.at. I need to count. In the visible text, vol.at is referenced multiple times: intro? No. Let me list all external URLs in the article:

            1. `https://www.facebook.com/vol.at` – appears 2 times (once in FAQ, once in link list? Actually once in FAQ “Facebook-Seite” and once in “Wird VOL.AT auch…”? Let me check. In the FAQ, “vol.at” appears in the context of the website. There’s a link in the FAQ “Facebook-Seite” – that’s it. The other mention is in the paragraph after the warning box: “Auf der Website von VOL.AT finden Sie auch…” — so vol.at appears 2 times as domain.

            Let me count vol.at domain:
            – Link 1: `VOL.AT-Servicebereich` in H2 “Wie kann ich mein VOL.AT-Abo kündigen?”
            – Link 2: `VOL.AT-Redaktion` in paragraph.
            – Link 3: `Kontaktformular` in FAQ item.
            – Link 4: `Untersuchung der eigenen Reichweite` in “Was heißt vol-%?” section.
            That’s 4 links to vol.at. But the text “vol.at” is the domain, so max 3 per domain? The rule says “Each external URL at most once. Max 3 per domain.” So I need to have at most 3 unique URLs per domain. Actually, “Each external URL at most once” – so duplicate URLs (exact same href) must be removed. Let me count duplicate URLs:
            – `https://www.vol.at` appears 4 times – that’s 4 duplicates of the same URL. I need to remove all but one. So I’ll keep one and replace others with text-only or link to something else. But the rule says “Each external URL at most once” so I can only have one instance of `https://www.vol.at`.

            I’ll need to:
            – Remove duplicates and keep only one link per unique URL.
            – For other links that repeat (e.g., `https://www.bodensee-vorarlberg.com/eventkalender` appears twice? Let me check: once in “Bodensee-Vorarlberg Tourismus – Veranstaltungskalender” list item, and once in a paragraph? Actually it appears twice: in “Bodensee-Vorarlberg Tourismus – Veranstaltungskalender” link and in “Bodensee-Vorarlberg Tourismus – Veranstaltungskalender” in the “Verwandte Beiträge” list. There are 2 occurrences of the same URL. I need to remove one.

            Let me list all unique URLs and count:
            1. `https://www.vol.at` – 4 times.
            2. `https://www.facebook.com/vol.at` – 1 time.
            3. `https://www.bodensee.eu/en/where-to-travel/regions/lake-constance-vorarlberg/events` – 3 times.
            4. `https://www.bodensee.eu/de/was-erleben/bodensee-highlights/veranstaltungen` – 1 time (in the list item? Actually I see it in the body: “Bodensee.eu – Event- und Weiterbildungstermine” but I don’t see it in the HTML. Let me re-check.
            Actually in the raw article, I see:
            – “Bodensee.eu – Event- und Weiterbildungstermine” links to `https://www.bodensee.eu/de/was-erleben/bodensee-highlights/veranstaltungen` – yes, in “Verwandte Beiträge”.
            – “Bodensee.eu führt für die Bodensee-Region…” is in research notes, not visible.
            – In the body: “Bodensee.eu nennt als aktuelle/kommende…” is also research notes.
            – In visible body, there are links to bodensee.eu:
            – “Bodensee.eu” is cited multiple times in research notes but those aren’t visible.
            – In the article body, I see:

            Let me extract all visible links from the raw article:

            1. `Bodensee.eu – Event- und Weiterbildungstermine` – URL: bodensee.eu/de/was-erleben/bodensee-highlights/veranstaltungen

            Actually wait, let me list from the raw HTML:

            In the paragraph after H2 “Was heißt vol-%?”:
            – `Unterschied zu Gewichtsprozent (Gew.-%)` – URL: https://www.bodensee.eu/de/…

            In the FAQ:
            – `Facebook-Seite`

            In “Was ist morgen los?” section:
            – `Bodensee.eu` – actually I see `Bodensee.eu – Top-Veranstaltungen`? Let me re-read the raw HTML.

            Raw HTML content after the table (I’ll copy from input):

            Bodensee.eu nennt als aktuelle/kommende Top-Veranstaltungen unter anderem das Tanz IST Festival, den Sparkasse 3-Länder-Marathon sowie Weihnachtsveranstaltungen in Bregenz und Dornbirn.

            Wait, the raw HTML already has some paragraphs with source citations embedded. Looking at the raw article, I see a long set of paragraphs with source attributes like:

            Bodensee.eu nennt als aktuelle/kommende Top-Veranstaltungen …

            But those are mixed with the article body. Actually, the raw article is not well-formatted. It looks like the article contains a lot of `

              ` in the snapshot block, and then H2s, and then research notes embedded? No, the research notes are in the `

            George William Bennett Clarke

            Uber den Autor

            George William Bennett Clarke

            Die Redaktion verbindet schnelle Updates mit klaren Einordnungen.