Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions reports/2026-10-own-results-evidence.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
57 changes: 8 additions & 49 deletions reports/conloca-2026-10/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ <h3>Storybook and browser coverage</h3>
</div>
</section>
<section class="report-section" id="approval">
<h2>Ready for approval</h2>
<h2>Theme picker preview</h2>
<p class="refs">
Current preview, 5 November. Separate from the October merges above.
</p>
Expand All @@ -197,7 +197,7 @@ <h3>Documentation theme picker</h3>
<p>
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.
</p>
<p class="refs">
<a
Expand Down Expand Up @@ -253,54 +253,13 @@ <h2>Before / after</h2>
</div>
</section>
<section class="report-section" id="checks">
<h2>Checks and previews</h2>
<p>
<strong>Protected Storybook:</strong>
<a
href="https://pages.hyperide.ai/alex-mextner/conloca-storybook-previews/main/"
>Main</a
>
·
<a
href="https://pages.hyperide.ai/alex-mextner/conloca-storybook-previews/pr-404/"
>Publisher preview #404</a
>
·
<a
href="https://pages.hyperide.ai/alex-mextner/conloca-storybook-previews/pr-489/"
>Theme-picker preview #489</a
>. Forge sign-in is required.
</p>
<p>
Published these catalogue snapshots and added their links to PR
descriptions. The publisher and automatic link refresh are implemented
in
<a
href="https://github.com/conloca/private/pull/404"
aria-label="Pull request 404"
>#404</a
>
and
<a
href="https://github.com/conloca/private/pull/509"
aria-label="Pull request 509"
>#509</a
>; both await merge approval.
</p>
<p class="refs">
<a
href="https://github.com/conloca/private/actions/runs/42052900149/job/127344610560"
>Publisher deployed-stage E2E</a
>. PR #404 includes the sandbox-path fix for prefixed catalogues; Main
tracks the merged branch.
</p>
<h2>Checks</h2>
<p>
<a href="https://github.com/conloca/private/actions/runs/40534284367"
>How it works: production deployment and E2E</a
>
·
<a
href="https://github.com/conloca/private/pull/244"
<a href="https://github.com/conloca/private/pull/244"
>Interactive Storybook scenarios and screenshot workflow</a
>
·
Expand All @@ -311,7 +270,7 @@ <h2>Checks and previews</h2>
</p>
</section>
<footer>
October 2026 · Ultra / Mextner · Updated 5 November 2026 ·
October 2026 · Ultra / Mextner · Updated 6 November 2026 ·
<a href="../2026-10-own-results-evidence.json">Source record</a>
</footer>
</main>
Expand All @@ -323,12 +282,12 @@ <h2>Checks and previews</h2>
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" },
],
});
</script>
Expand Down
63 changes: 58 additions & 5 deletions scripts/ci/check-own-results.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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"]
Expand Down
Loading