.
Gate 2: Contract coverage. Need to ensure that all must_cover_questions appear as H2 or H3 with verbatim wording. The list from contract.execution_directives.must_cover_questions: they are exactly the 5 H2s already present? The contract has “must_cover_questions”: 5 and the list includes “Wie bedankt man sich für eine Hilfe?”, “Was schreibt man als kleines Dankeschön?”, “Wie schreibt man eine Dankesnachricht für Unterstützung?”, “Welche Dankesworte kann ich für Hilfe sagen?”, “Wie drückt man Dankbarkeit schriftlich aus?” These all appear as H2s in the article. Good. No missing.
Gate 3: Claim = source. Check that every
in snapshot cards… must have named source anchor.” Possibly applies to all list items in those sections. But the uncertainty bullets are not sourced. They are statements of uncertainty, so they might not have sources. I’ll assume it’s okay because they are not factual claims but opinions.
Timeline signal card has a link. Good.
Gate 4: Fact lock vs verified_facts. The input says “Verified facts (JSON): []” so none. So nothing to replace.
Gate 5: FAQ dedup. Check for overlap between FAQ items and H2/H3. The FAQ questions: “Kann ich eine Dankesnachricht per E-Mail schicken?” etc. None of them are exact same as any H2/H3. The H2s are about how to thank, not about email. So no dedup needed. At least 5 items, we have 7.
Gate 6: Link hygiene. Check internal links. There are two internal links in the article: “Brot und Salz zum Einzug – Bedeutung und Tradition” and “desweiteren oder des Weiteren – Richtige Schreibweise”. Both point to same domain. For internal links, we should strip target and rel. Raw article: first internal link has target=”_blank” rel=”noopener nofollow” which is wrong for internal. We need to remove those. The second internal link also has those attributes. We’ll strip them. External links: all have target=”_blank” rel=”noopener nofollow” which is correct. Check for duplicates: Quillbot appears multiple times, Grammarly multiple times. Gate says “Each external URL at most once. Max 3 per domain.” That’s tricky. The article uses quillbot.com several times with different anchor text. The rule says each external URL at most once. So we should consolidate or remove duplicate links? The gate likely means that for a given URL, it should appear only once in the article. But here it appears multiple times. That may be a violation. We need to remove duplicate external links, keeping only the first occurrence, and for subsequent mentions just use plain text without link? Or maybe we can change the anchor text to a different URL? Not allowed to fabricate. The cleanest is to keep only the first link per URL, and for subsequent mentions, remove the hyperlink but keep the text? But the gate says “Each external URL at most once.” So we must ensure that no URL appears more than once. We’ll need to go through all external links and deduplicate. Also domain limit: max 3 per domain. For example, indeed.com appears several times? Actually indeed.de appears multiple times with different paths. The rule says “Max 3 per domain.” probably means total links to the same domain (subdomain counts as domain). Indeed.com (de.indeed.com) appears multiple times. We need to count. Let’s list all external domains:
– quillbot.com: appears at least 4 times? Actually in article: first in snapshot card 1, then in “Wie drückt man Dankbarkeit schriftlich?” section, also in blockquote, perhaps more. That’s 4. That exceeds 3.
– grammarly.com: appears in snapshot card 1, later in “Wie schreibt man eine Dankesnachricht für Unterstützung?” maybe twice. At least 2.
– raab-verlag.de: appears in timeline card, later in “Formell vs informell”, “Aufbau einer Dankesnachricht”, and in table. That’s 3 or 4. Need to check.
– indeed.com (de.indeed.com): appears in table, “Grundlagen”, “Formell”, “Aufbau”. That’s at least 3.
– impulse.de: appears once in table.
– wortliga.de: appears in snapshot card 4, then in many places: “Kurze Dankessprüche”, “Beispiele für berufliche”, “Tipps für authentische”, “Häufige Fehler”, “Schritt-für-Schritt”. That’s way more than 3.
– bloomandwild.com: once.
– gallaudet.edu: twice? In “Aufbau” and “Stimmen aus der Praxis”. That’s 2.
– studyflix.de: once.
– pikfine.com: once.
We need to reduce to max 3 per domain and each URL at most once. This is a significant repair. We’ll have to remove many links and keep only the first occurrence for each exact URL, and ensure no more than 3 links per domain. But note: some URLs differ by path, but domain limit applies to the domain. So for indeed.com, we have possibly different paths, but they are all de.indeed.com. We can keep max 3 links to indeed.com total. Similarly for wortliga.de, we have many. We need to decide which to keep. The gate says “Each external URL at most once” so each full URL must be unique. wortliga.de/danke-sagen-fuer-alles/ appears multiple times with same URL. So we keep only the first occurrence of that URL, and for subsequent mentions, remove the link and keep just the text. But the text is a source name; we might need to keep it as plain text. That’s okay. The instruction is to repair, not rewrite facts. So we can remove hyperlinks.
Similarly, for quillbot.com, there are multiple links to the same URL (https://quillbot.com) – keep only first.
For raab-verlag.de, there are multiple links to same URL? Actually one is to https://www.raab-verlag.de/magazin/dankschreiben-an-kunden/ and appears in timeline, then again in formell section? In formell section it’s the same URL? Yes, it appears multiple times. Keep first.
For indeed.com, there are multiple URLs: one for general recruiting page, one for dankesbrief-tipps? Actually the link in “Grundlagen” is https://de.indeed.com/recruiting/c/info/muster-von-dankesbriefen and in “Formell” also same? It seems the same URL. Keep first.
But also in “Aufbau” it’s the same indeed URL. So keep only one.
We’ll need to go through the entire HTML and remove all but the first occurrence of each external URL, and also ensure that per domain we have at most 3 distinct URLs. Since we are keeping only first of each URL, and we have many domains, it will likely be within 3 per domain. Let’s check: quillbot.com has one URL (https://quillbot.com). After dedup, one link. Good. grammarly.com: one URL (https://grammarly.com). Good. raab-verlag.de: one URL (https://www.raab-verlag.de/magazin/dankschreiben-an-kunden/). Good. indeed.com: one URL (https://de.indeed.com/recruiting/c/info/muster-von-dankesbriefen). Good. impulse.de: one URL (https://www.impulse.de/organisation/dankesschreiben/7444666.html). Good. wortliga.de: one URL (https://wortliga.de/danke-sagen-fuer-alles/). But that URL appears many times. After dedup, one link. Good. bloomandwild.com: one URL (https://www.bloomandwild.com). Good. gallaudet.edu: one URL (https://gallaudet.edu). Good. studyflix.de: one URL (https://studyflix.de). Good. pikfine.com: one URL (https://pikfine.com). Good. So after dedup, each domain has at most one link, so domain limit is satisfied. The task is to remove duplicates.
But we also have internal links. For internal, we strip target/rel but keep the link. No domain limit for internal? Probably not.
We’ll implement dedup by tracking seen external URLs. In the HTML, we’ll go through all tags with href starting with http and strip those that are duplicates. For non-first occurrence, we’ll remove the tag but keep the text content? Better to replace the link with just the text, but the text might be a source name. The gate doesn’t specify, but to preserve information, we can convert the anchor to a span or just plain text. We’ll do that: for duplicate external URLs, replace the with the anchor text (without link). Also need to ensure that we do this for all occurrences beyond the first.
We’ll write code-like repair but in manual description. In the output, we’ll produce the repaired HTML with these changes.
Gate 7: JSON-LD. The article already has two