diff --git a/reports/2026-10-own-results-evidence.json b/reports/2026-10-own-results-evidence.json index 98a960f..1a2f902 100644 --- a/reports/2026-10-own-results-evidence.json +++ b/reports/2026-10-own-results-evidence.json @@ -345,6 +345,8 @@ "url": "https://github.com/conloca/private/pull/509" } ], + "status": "historical", + "historicalNote": "Receipts of an earlier catalogue publication on 5 November 2026. Superseded and not linked from the human reports.", "segments": [ { "segment": "main", diff --git a/reports/conloca-2026-10/index.html b/reports/conloca-2026-10/index.html index d7136a4..edbdeaf 100644 --- a/reports/conloca-2026-10/index.html +++ b/reports/conloca-2026-10/index.html @@ -187,7 +187,7 @@

Storybook and browser coverage

-

Ready for approval

+

Theme picker preview

Current preview, 5 November. Separate from the October merges above.

@@ -197,7 +197,7 @@

Documentation theme picker

Added Light, Dark and System controls with visible selection, keyboard navigation and touch targets. Current-head CI and - deployed-stage E2E passed; the implementation awaits team approval. + deployed-stage E2E passed; the change awaits team review.

Before / after

-

Checks and previews

-

- Protected Storybook: - Main - · - Publisher preview #404 - · - Theme-picker preview #489. Forge sign-in is required. -

-

- Published these catalogue snapshots and added their links to PR - descriptions. The publisher and automatic link refresh are implemented - in - #404 - and - #509; both await merge approval. -

-

- Publisher deployed-stage E2E. PR #404 includes the sandbox-path fix for prefixed catalogues; Main - tracks the merged branch. -

+

Checks

How it works: production deployment and E2E · - Interactive Storybook scenarios and screenshot workflow · @@ -311,7 +270,7 @@

Checks and previews

@@ -323,12 +282,12 @@

Checks and previews

title: "Conloca: October 2026", subtitle: "Editor fixes, safe writes, visual coverage and the production landing update", - date: "2026-11-05", + date: "2026-11-06", badge: { label: "October results", type: "feat" }, links: [ { label: "Merged changes", href: "#results" }, - { label: "Ready for approval", href: "#approval" }, - { label: "Checks and previews", href: "#checks" }, + { label: "Theme picker", href: "#approval" }, + { label: "Checks", href: "#checks" }, ], }); diff --git a/scripts/ci/check-own-results.py b/scripts/ci/check-own-results.py index 3386d40..c447dec 100644 --- a/scripts/ci/check-own-results.py +++ b/scripts/ci/check-own-results.py @@ -16,6 +16,39 @@ def handle_starttag(self, tag, attrs): self.urls.append(dict(attrs).get("href", "")) +class VisibleText(HTMLParser): + def __init__(self, text): + super().__init__() + self.parts = [] + self.skip = 0 + self.feed(text) + + def handle_starttag(self, tag, attrs): + if tag in ("script", "style"): + self.skip += 1 + + def handle_endtag(self, tag): + if tag in ("script", "style"): + self.skip -= 1 + + def handle_data(self, data): + if not self.skip: + self.parts.append(data) + + @property + def text(self): + return " ".join(" ".join(self.parts).split()).casefold() + + +REJECTED_CLAIMS = [ + "protected storybook", + "ready for approval", + "catalogue snapshots", + "publisher deployed-stage e2e", + "automatic link refresh", +] + + class ReportContract(unittest.TestCase): def setUp(self): self.data = json.loads( @@ -35,11 +68,31 @@ def test_images_match_recorded_evidence(self): self.assertEqual(b[:8], b"\x89PNG\r\n\x1a\n") self.assertEqual(hashlib.sha256(b).hexdigest(), r["sha256"]) - def test_live_catalogue_links_not_just_pr_links(self): - urls = Links((ROOT / "reports/conloca-2026-10/index.html").read_text()).urls - base = "https://pages.hyperide.ai/alex-mextner/conloca-storybook-previews/" - for segment in ["main", "pr-404", "pr-489"]: - self.assertIn(base + segment + "/", urls) + def test_rejected_catalogue_links_and_claims_are_absent(self): + for slug in self.data["reports"]: + text = (ROOT / "reports" / slug / "index.html").read_text(encoding="utf-8") + self.assertNotIn("pages.hyperide.ai", text.casefold()) + visible = VisibleText(text).text + raw = " ".join(text.split()).casefold() + for phrase in REJECTED_CLAIMS: + self.assertNotIn(phrase, visible) + self.assertNotIn(phrase, raw) + + def test_conloca_keeps_tested_preview_attribution_and_images(self): + text = (ROOT / "reports/conloca-2026-10/index.html").read_text(encoding="utf-8") + urls = Links(text).urls + for url in [ + "https://site.pr489.conloca.com/getting-started/", + "https://github.com/conloca/private/actions/runs/41626469902/job/125893569803", + "https://github.com/conloca/private/actions/runs/40534284367", + "images/theme-before.png", + "images/theme-after.png", + ]: + self.assertIn(url, urls) + self.assertIn("Work by Ultra / Mextner", text) + + def test_catalogue_receipts_are_historical_only(self): + self.assertEqual(self.data["storybookPreviews"]["status"], "historical") def test_new_workflows_not_presented_as_merged(self): data = self.data["storybookPreviews"]