Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
4bbdaec
chore: move Python package into workspace
Aug 13, 2026
a963e61
test: establish shared conformance contract
Aug 13, 2026
b9dff2e
feat: add TypeScript package
Aug 13, 2026
9feb1da
ci: add coordinated package release automation
Aug 13, 2026
26d8e0a
docs: migrate site to Docusaurus
Aug 13, 2026
6902182
feat: make docs language selection site-wide
Aug 13, 2026
d8f6978
docs: complete language-specific guides
Aug 13, 2026
25f60fe
feat: expose versioned documentation
Aug 13, 2026
b4047f8
feat: standardise TypeScript block factory names
Aug 13, 2026
870fbba
docs: improve API reference generation and navigation
Aug 13, 2026
e991480
test: enforce comprehensive conformance coverage
Aug 13, 2026
91c585f
feat: support current Block Kit blocks in Python
Aug 13, 2026
1d3289f
feat: support current Block Kit blocks in TypeScript
Aug 13, 2026
01ea381
docs: bring TypeScript API reference to parity
Aug 13, 2026
3308898
docs: add validated Block Kit previews
Aug 13, 2026
1eb2d44
ci: align monorepo validation
Aug 13, 2026
a188c2c
chore: prepare 2.1.0 release
Aug 13, 2026
517b0b4
docs: add legacy migration contract and tooling
Aug 13, 2026
c418f39
ci: give stacked pull requests check runs
Aug 14, 2026
051fb38
Merge branch 'codex/monorepo-foundation' into codex/shared-conformance
Aug 14, 2026
eb11ad6
Merge branch 'codex/shared-conformance' into codex/typescript-package
Aug 14, 2026
039edb3
Merge branch 'codex/release-automation' into codex/docusaurus-platform
Aug 14, 2026
024df24
ci: give stacked pull requests check runs
Aug 14, 2026
46296d4
ci: give stacked pull requests check runs
Aug 14, 2026
61927db
Merge branch 'codex/typescript-package' into codex/release-automation
Aug 14, 2026
dd47942
Merge branch 'codex/docusaurus-platform' into codex/docs-language-nav…
Aug 14, 2026
a1651de
Merge branch 'codex/docs-language-navigation' into codex/docs-guides
Aug 14, 2026
82b2cbc
Merge branch 'codex/docs-guides' into codex/docs-version-history
Aug 14, 2026
9903b2f
Merge branch 'codex/docs-version-history' into codex/typescript-api-n…
Aug 14, 2026
6acc43f
Merge branch 'codex/typescript-api-names' into codex/api-reference-re…
Aug 14, 2026
b3b9673
Merge branch 'codex/api-reference-rendering' into codex/conformance-c…
Aug 14, 2026
b7558fe
Merge branch 'codex/conformance-coverage' into codex/python-current-b…
Aug 14, 2026
2697b87
Merge branch 'codex/python-current-blocks' into codex/typescript-curr…
Aug 14, 2026
f517aaa
Merge branch 'codex/typescript-current-blocks' into codex/typescript-…
Aug 14, 2026
28ca782
Merge branch 'codex/typescript-api-details' into codex/block-guide-pr…
Aug 14, 2026
64b56e3
Merge branch 'codex/block-guide-previews' into codex/ci-validation
Aug 14, 2026
ee4a482
Merge branch 'codex/ci-validation' into codex/release-2-1
Aug 14, 2026
04e2aa7
Merge branch 'codex/release-2-1' into codex/legacy-docs-tooling
Aug 14, 2026
5acbed8
ci: build the smoke package before switching to the matrix Node
Aug 14, 2026
5aa69a4
ci: pin setup-uv to an existing tag
Aug 14, 2026
ea34267
Merge branch 'codex/typescript-package' into codex/release-automation
Aug 14, 2026
f7a03b6
Merge branch 'codex/release-automation' into codex/docusaurus-platform
Aug 14, 2026
3391fbc
Merge branch 'codex/docusaurus-platform' into codex/docs-language-nav…
Aug 14, 2026
5fa4a6c
Merge branch 'codex/docs-language-navigation' into codex/docs-guides
Aug 14, 2026
aa8e2b7
Merge branch 'codex/docs-guides' into codex/docs-version-history
Aug 14, 2026
8c4863f
Merge branch 'codex/docs-version-history' into codex/typescript-api-n…
Aug 14, 2026
7ccaf67
Merge branch 'codex/typescript-api-names' into codex/api-reference-re…
Aug 14, 2026
8b8b17c
Merge branch 'codex/api-reference-rendering' into codex/conformance-c…
Aug 14, 2026
4a31d36
Merge branch 'codex/conformance-coverage' into codex/python-current-b…
Aug 14, 2026
0af2725
Merge branch 'codex/python-current-blocks' into codex/typescript-curr…
Aug 14, 2026
4fbce52
Merge branch 'codex/typescript-current-blocks' into codex/typescript-…
Aug 14, 2026
4925bf8
Merge branch 'codex/typescript-api-details' into codex/block-guide-pr…
Aug 14, 2026
03382fb
Merge branch 'codex/block-guide-previews' into codex/ci-validation
Aug 14, 2026
3ddf0d1
Merge branch 'codex/ci-validation' into codex/release-2-1
Aug 14, 2026
f05e03c
Merge branch 'codex/release-2-1' into codex/legacy-docs-tooling
Aug 14, 2026
7341f8a
ci: alias the package name for docs-example typechecking
Aug 14, 2026
43e37f5
Merge branch 'codex/docusaurus-platform' into codex/docs-language-nav…
Aug 14, 2026
a83ed9e
Merge branch 'codex/docs-language-navigation' into codex/docs-guides
Aug 14, 2026
2a04eca
Merge branch 'codex/docs-guides' into codex/docs-version-history
Aug 14, 2026
9d39f67
Merge branch 'codex/docs-version-history' into codex/typescript-api-n…
Aug 14, 2026
cb03b54
Merge branch 'codex/typescript-api-names' into codex/api-reference-re…
Aug 14, 2026
5cef2b2
Merge branch 'codex/api-reference-rendering' into codex/conformance-c…
Aug 14, 2026
5a880c6
Merge branch 'codex/conformance-coverage' into codex/python-current-b…
Aug 14, 2026
44e9211
Merge branch 'codex/python-current-blocks' into codex/typescript-curr…
Aug 14, 2026
cc99d2d
Merge branch 'codex/typescript-current-blocks' into codex/typescript-…
Aug 14, 2026
3e2a7af
Merge branch 'codex/typescript-api-details' into codex/block-guide-pr…
Aug 14, 2026
5663ea1
Merge branch 'codex/block-guide-previews' into codex/ci-validation
Aug 14, 2026
4fa02ea
Merge branch 'codex/ci-validation' into codex/release-2-1
Aug 14, 2026
526123f
Merge branch 'codex/release-2-1' into codex/legacy-docs-tooling
Aug 14, 2026
f5e040e
ci: resolve the package alias in vitest and skip the unused uv cache
Aug 14, 2026
d506a26
Merge branch 'codex/docusaurus-platform' into codex/docs-language-nav…
Aug 14, 2026
1d5c543
Merge branch 'codex/docs-language-navigation' into codex/docs-guides
Aug 14, 2026
76fe53e
Merge branch 'codex/docs-guides' into codex/docs-version-history
Aug 14, 2026
9099455
Merge branch 'codex/docs-version-history' into codex/typescript-api-n…
Aug 14, 2026
c205bc9
Merge branch 'codex/typescript-api-names' into codex/api-reference-re…
Aug 14, 2026
c6744f2
Merge branch 'codex/api-reference-rendering' into codex/conformance-c…
Aug 14, 2026
6bd4ac3
Merge branch 'codex/conformance-coverage' into codex/python-current-b…
Aug 14, 2026
b5e47e0
Merge branch 'codex/python-current-blocks' into codex/typescript-curr…
Aug 14, 2026
7a00a7b
Merge branch 'codex/typescript-current-blocks' into codex/typescript-…
Aug 14, 2026
fb28813
Merge branch 'codex/typescript-api-details' into codex/block-guide-pr…
Aug 14, 2026
9bd1867
Merge branch 'codex/block-guide-previews' into codex/ci-validation
Aug 14, 2026
872ff81
Merge branch 'codex/ci-validation' into codex/release-2-1
Aug 14, 2026
dc63917
Merge branch 'codex/release-2-1' into codex/legacy-docs-tooling
Aug 14, 2026
ecd4f2f
Merge remote-tracking branch 'origin/master' into codex/legacy-docs-t…
Aug 14, 2026
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
Binary file added docs/legacy/fixtures/v1.0.0.tar.gz
Binary file not shown.
800 changes: 800 additions & 0 deletions docs/legacy/inventories/v1.0.0.json

Large diffs are not rendered by default.

806 changes: 806 additions & 0 deletions docs/legacy/inventories/v1.0.1.json

Large diffs are not rendered by default.

817 changes: 817 additions & 0 deletions docs/legacy/inventories/v1.0.10.json

Large diffs are not rendered by default.

817 changes: 817 additions & 0 deletions docs/legacy/inventories/v1.0.11.json

Large diffs are not rendered by default.

828 changes: 828 additions & 0 deletions docs/legacy/inventories/v1.0.12.json

Large diffs are not rendered by default.

828 changes: 828 additions & 0 deletions docs/legacy/inventories/v1.0.13.json

Large diffs are not rendered by default.

828 changes: 828 additions & 0 deletions docs/legacy/inventories/v1.0.14.json

Large diffs are not rendered by default.

828 changes: 828 additions & 0 deletions docs/legacy/inventories/v1.0.15.json

Large diffs are not rendered by default.

828 changes: 828 additions & 0 deletions docs/legacy/inventories/v1.0.16.json

Large diffs are not rendered by default.

806 changes: 806 additions & 0 deletions docs/legacy/inventories/v1.0.2.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.3.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.5.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.6.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.7.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.8.json

Large diffs are not rendered by default.

818 changes: 818 additions & 0 deletions docs/legacy/inventories/v1.0.9.json

Large diffs are not rendered by default.

840 changes: 840 additions & 0 deletions docs/legacy/inventories/v1.1.1.json

Large diffs are not rendered by default.

870 changes: 870 additions & 0 deletions docs/legacy/inventories/v1.2.2.json

Large diffs are not rendered by default.

870 changes: 870 additions & 0 deletions docs/legacy/inventories/v1.2.3.json

Large diffs are not rendered by default.

870 changes: 870 additions & 0 deletions docs/legacy/inventories/v1.2.4.json

Large diffs are not rendered by default.

1,194 changes: 1,194 additions & 0 deletions docs/legacy/inventories/v1.2.5.json

Large diffs are not rendered by default.

1,639 changes: 1,639 additions & 0 deletions docs/legacy/inventories/v2.0.0.json

Large diffs are not rendered by default.

692 changes: 692 additions & 0 deletions docs/legacy/manifest.json

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
"private": true,
"scripts": {
"generate:python": "UV_CACHE_DIR=../.uv-cache uv run --project ../python --group docs python scripts/generate_python_reference.py",
"generate:legacy": "UV_CACHE_DIR=../.uv-cache uv run --project ../python --group docs python scripts/port_legacy_docs.py generate",
"check:typescript-api": "node scripts/check_typescript_api_docs.mjs",
"check:typescript-api-rendering": "node scripts/check_typescript_api_rendering.mjs",
"check:legacy-contract": "node scripts/check_legacy_docs.mjs",
"test:legacy-fixture": "UV_CACHE_DIR=../.uv-cache uv run --project ../python --group docs python scripts/port_legacy_docs.py fixture",
"generate": "pnpm generate:python && pnpm check:typescript-api",
"start": "pnpm generate && docusaurus start",
"build": "pnpm generate && docusaurus build && pnpm check:typescript-api-rendering",
"typecheck": "tsc --noEmit",
"test": "pnpm typecheck"
"test": "pnpm typecheck && pnpm check:legacy-contract"
},
"dependencies": {
"@docusaurus/core": "^3.10.2",
Expand Down
93 changes: 93 additions & 0 deletions docs/scripts/check_legacy_docs.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/usr/bin/env node

import { existsSync, readFileSync } from "node:fs";
import { join, resolve } from "node:path";
import { fileURLToPath } from "node:url";

const docsRoot = resolve(fileURLToPath(new URL("..", import.meta.url)));
const manifest = JSON.parse(
readFileSync(join(docsRoot, "legacy", "manifest.json"), "utf8"),
);
const versions = manifest.versions;

function fail(message) {
throw new Error(message);
}

if (versions.length !== 22) fail(`Expected 22 published versions, found ${versions.length}`);
if (versions.some(({ version }) => version === "1.0.4" || version === "1.2.1")) {
fail("Unpublished documentation versions are present");
}
const canonicalRouteCount = versions.reduce(
(total, version) => total + version.expected_routes.length,
0,
);
if (canonicalRouteCount !== 294) {
fail(`Expected 294 canonical routes, found ${canonicalRouteCount}`);
}

for (const version of versions) {
if (JSON.stringify(version.language_availability) !== JSON.stringify(["python"])) {
fail(`${version.tag} is not marked Python-only`);
}
const inventory = JSON.parse(
readFileSync(join(docsRoot, "legacy", version.inventory), "utf8"),
);
if (inventory.gh_pages_commit !== manifest.migration.gh_pages_commit) {
fail(`${version.tag} inventory does not match the manifest gh-pages commit`);
}
const inventoryRoutes = inventory.pages.map(({ route }) => route);
if (JSON.stringify(inventoryRoutes) !== JSON.stringify(version.expected_routes)) {
fail(`${version.tag} inventory routes differ from its manifest entry`);
}
}

const registered = versions.filter(({ generated_snapshot_tree_hash: hash }) => hash);
const versionsFile = JSON.parse(readFileSync(join(docsRoot, "versions.json"), "utf8"));
if (registered.length > 0) {
const expectedVersions = registered.map(({ version }) => version);
if (JSON.stringify(versionsFile) !== JSON.stringify(expectedVersions)) {
fail("docs/versions.json is not generated from the registered manifest entries");
}
}

function routeFile(buildRoot, prefix, route) {
const suffix = route === "/" ? "" : route;
const path = `${prefix}${suffix}`.replace(/^\//, "");
const candidates = [
join(buildRoot, `${path}.html`),
join(buildRoot, path, "index.html"),
];
return candidates.find(existsSync);
}

const buildArgument = process.argv.indexOf("--build-dir");
if (buildArgument >= 0) {
const buildRoot = resolve(process.cwd(), process.argv[buildArgument + 1]);
if (!existsSync(buildRoot)) fail(`Build directory does not exist: ${buildRoot}`);
for (const version of registered) {
for (const route of version.expected_routes) {
const output = routeFile(buildRoot, version.canonical_prefix, route);
if (!output) fail(`Missing built route ${version.canonical_prefix}${route}`);
const rendered = readFileSync(output, "utf8");
if (/reference\/typescript/.test(rendered)) {
fail(`${version.canonical_prefix}${route} contains a TypeScript reference route`);
}
if (route.startsWith("/reference/")) {
const inventory = JSON.parse(
readFileSync(join(docsRoot, "legacy", version.inventory), "utf8"),
);
const page = inventory.pages.find((candidate) => candidate.route === route);
for (const anchor of page.api_anchors) {
if (!rendered.includes(`id="${anchor}"`)) {
fail(`${version.canonical_prefix}${route} is missing historical anchor ${anchor}`);
}
}
}
}
}
}

console.log(
`Legacy documentation contract covers ${versions.length} versions and ${canonicalRouteCount} routes; ${registered.length} snapshots are registered.`,
);
Loading