diff --git a/.github/scripts/test_methodology.cjs b/.github/scripts/test_methodology.cjs index a43884e..3ad9c07 100644 --- a/.github/scripts/test_methodology.cjs +++ b/.github/scripts/test_methodology.cjs @@ -18,11 +18,16 @@ function initialElements() { return elements; } -async function load(fetch) { +async function load(fetch, signal = new AbortController().signal) { const elements = initialElements(); const context = vm.createContext({ document: { getElementById: id => elements[id] }, - fetch: url => { assert.equal(url, api); return fetch(); }, + AbortSignal: { timeout: ms => { assert.equal(ms, 8000); return signal; } }, + fetch: (url, options) => { + assert.equal(url, api); + assert.equal(options.signal, signal); + return fetch(url, options); + }, console: { error() {} }, }); await vm.runInContext(script, context, { timeout: 1000 }); @@ -68,3 +73,11 @@ test('release names stay text and release tags stay within the tag URL', async ( assert.match(elements['version-placeholder'].textContent, /Breaking changes/); assert.doesNotMatch(elements['version-placeholder'].textContent, / { + const signal = AbortSignal.abort(new DOMException('Request timed out', 'TimeoutError')); + const elements = await load(async (url, { signal }) => { throw signal.reason; }, signal); + assert.equal(elements['spec-link'].href, latest); + assert.equal(elements['spec-link'].textContent, 'Read the full methodology specification on GitHub'); + assert.equal(elements['version-placeholder'].textContent, 'View the latest methodology specification on GitHub.'); +}); diff --git a/.github/scripts/test_site_artifact.py b/.github/scripts/test_site_artifact.py index 16acfbf..5c96496 100644 --- a/.github/scripts/test_site_artifact.py +++ b/.github/scripts/test_site_artifact.py @@ -1,10 +1,78 @@ from pathlib import Path +from html.parser import HTMLParser import tempfile import unittest +from urllib.parse import urljoin from build_site import build, consumer_paths +class Navigation(HTMLParser): + def __init__(self): + super().__init__() + self.navs = [] + self.current = None + + def handle_starttag(self, tag, attrs): + attrs = dict(attrs) + if tag == "nav": + self.current = {"class": attrs.get("class"), "label": attrs.get("aria-label"), "links": []} + self.navs.append(self.current) + elif tag == "a" and self.current is not None: + self.current["links"].append({**attrs, "text": ""}) + + def handle_data(self, text): + if self.current is not None and self.current["links"]: + self.current["links"][-1]["text"] += text + + def handle_endtag(self, tag): + if tag == "nav": + self.current = None + + class SiteArtifactTests(unittest.TestCase): + def test_reader_pages_expose_the_primary_destinations_in_initial_html(self): + root = Path.cwd() + for path in sorted(consumer_paths(root)): + if not path.endswith("index.html") or path == "marketplace-status/index.html": + continue + html = (root / path).read_text() + if ' -
+

DSL-Beispiele

Ein minimales, gültiges Beispiel pro Notation, die Transitrix Studio unterstützt — kopieren Sie die Struktur direkt, statt sie zu erraten.

@@ -504,7 +513,7 @@

Weiterführend

  • Rezepte, die andere Dateistruktur: Das .ttrs-Rezeptformat
  • JSON Schemas: Schemas auf GitHub
  • Maschinenlesbare Projektübersicht: llms.txt
  • -
  • Studio installieren, um alles oben live in der Vorschau zu sehen: Installieren & starten →
  • +
  • Studio installieren, um alles oben live in der Vorschau zu sehen: Installieren & starten →
  • diff --git a/de/dsm/index.html b/de/dsm/index.html index d6ac3ca..dc7bf75 100644 --- a/de/dsm/index.html +++ b/de/dsm/index.html @@ -48,9 +48,18 @@ DE + -
    +

    Transitrix DSM — die Strategieebene

    Dynamisches Strategiemanagement, das auf dem Transitrix-Modell operiert — eine Strategie, die sich aktualisiert, wenn sich das Unternehmensmodell verändert, statt eines Dokuments, das in der Woche nach seiner Verabschiedung veraltet.

    @@ -73,6 +82,7 @@

    Wo das einzuordnen ist

    Status

    Transitrix DSM ist heute nicht offen: kein Build zum Installieren, kein Repository zum Klonen, und kein Datum dafür festgelegt, dass sich das ändert. Der Weg, es in Aktion zu sehen, ist ein Gespräch — schreiben Sie an hello@transitrix.com.

    +

    Zum Modellieren mit den offenen Werkzeugen: Studio installieren und das erste Modell erstellen.