Skip to content

Commit fb45fae

Browse files
committed
fix(docs): retain readable tabs without JavaScript and verify current staging
1 parent 179c340 commit fb45fae

12 files changed

Lines changed: 452 additions & 215 deletions

File tree

‎.github/workflows/docs-negotiation.yml‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ jobs:
159159
DOCS_HEADER_REPORT_PATH: ${{ github.workspace }}/apps/docs/test-results/docs-headers.json
160160
DOCS_NAVIGATION_REPORT_PATH: ${{ github.workspace }}/apps/docs/test-results/navigation/docs.json
161161
DOCS_GENERATORS_REPORT_PATH: ${{ github.workspace }}/apps/docs/test-results/generators/report.json
162+
DOCS_MIGRATION_REPORT_PATH: ${{ github.workspace }}/apps/docs/test-results/migration.json
162163
DOCS_SAMPLES_REPORT_PATH: ${{ github.workspace }}/apps/docs/test-results/samples/report.json
163164
DOCS_SAMPLES_SYNTAX_LANGUAGES: javascript,python,bash,go,java,csharp
164165
DOCS_SAMPLES_HTTP_BASE_URL: http://127.0.0.1:3001
@@ -180,27 +181,37 @@ jobs:
180181
run: bun run --cwd apps/docs build
181182
- name: Verify generator idempotence and authored regions
182183
run: bun run --cwd apps/docs scripts/test-generators-e2e.ts
184+
- name: Verify preserved routes, anchors and examples
185+
if: always() && steps.build.outcome == 'success'
186+
run: bun run --cwd apps/docs content:verify-migration
183187
- name: Verify native header edge cases
188+
if: always() && steps.build.outcome == 'success'
184189
run: bun run --cwd apps/docs test:headers:e2e
185190
- name: Verify isolated PostgreSQL search and index lifecycle
191+
if: always() && steps.build.outcome == 'success'
186192
run: bun run --cwd apps/docs test:search:postgres:e2e
187193
- name: Set up Java for copied request examples
194+
if: always() && steps.build.outcome == 'success'
188195
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
189196
with:
190197
distribution: temurin
191198
java-version: '17'
192199
- name: Set up .NET for copied request examples
200+
if: always() && steps.build.outcome == 'success'
193201
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5
194202
with:
195203
dotnet-version: '8.0.x'
196204
- name: Set up Go for copied request examples
205+
if: always() && steps.build.outcome == 'success'
197206
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
198207
with:
199208
go-version: '1.25.x'
200209
cache: false
201210
- name: Install browser for navigation checks
211+
if: always() && steps.build.outcome == 'success'
202212
run: bunx --no-install playwright install --with-deps chromium webkit
203213
- name: Verify HTTP content negotiation
214+
if: always() && steps.build.outcome == 'success'
204215
run: |
205216
mkdir -p apps/docs/test-results
206217
bun run --cwd apps/docs start --port 3001 >apps/docs/test-results/docs-server.log 2>&1 &

‎apps/docs/MACHINE_ACCESS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ The PostgreSQL suite uses a new, empty, loopback database and no embedding key.
7979

8080
The platform consumer harness also uses an empty loopback database and the running docs build. From `apps/sim`, run `bun --no-env-file scripts/test-docs-search-provider-e2e.ts` with `DOCS_PROVIDER_E2E_DATABASE_URL`, `DOCS_PROVIDER_E2E_BASE_URL` and `DOCS_PROVIDER_E2E_REPORT_PATH`. Its default mode uses the existing Azure endpoint configuration with a local HTTP fixture, deterministic vectors and the real PostgreSQL provider-admission store. It verifies the platform's direct-table search, scope exclusions, VFS reads and public citations, with no paid requests. This verifies the transport and consumer contract, not semantic relevance.
8181

82-
Live provider verification is opt-in: set `DOCS_PROVIDER_E2E_ALLOW_LIVE=1` and supply `OPENAI_API_KEY`, using a fresh database named `docs_search_provider_test`. The harness limits publication to one introduction chunk and the consumer to one query, with at most two provider requests. Provider failure stops the run and remains a failed report. The default fixture mode also accepts the empty `docs_search_test` database used by the PostgreSQL suite. Both modes remove their tables when finished.
82+
Live provider verification is opt-in: set `DOCS_PROVIDER_E2E_ALLOW_LIVE=1` and supply `OPENAI_API_KEY`, using a fresh database named `docs_search_provider_test`. The harness limits publication to the introduction page, rejects plans above 15 chunks, and sends at most one batch with up to three attempts. The consumer makes at most one query embedding request, for a total cap of four provider requests. Provider failure stops the run and remains a failed report. The default fixture mode also accepts the empty `docs_search_test` database used by the PostgreSQL suite. Both modes remove their tables when finished.
8383

8484
To repeat locally, create a disposable container (the command returns its ID):
8585

‎apps/docs/components/docs/sample-panels.tsx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ export function SamplePanels({
8585
<Tab
8686
key={item.value}
8787
value={item.value}
88+
label={item.label}
8889
id={item.id ?? `${selectorId}-${item.value}`}
8990
{...(presentation === 'select' ? { role: 'region', 'aria-labelledby': selectorId } : {})}
9091
className='[&>div]:pt-0'

‎apps/docs/components/ui/tabs.tsx‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ interface TabsProps extends Omit<ComponentPropsWithoutRef<typeof RadixTabs.Root>
3838

3939
interface TabProps extends Omit<ComponentPropsWithoutRef<typeof RadixTabs.Content>, 'value'> {
4040
value?: string
41+
label?: string
4142
}
4243

4344
/** Accessible provider tabs retain every panel in HTML for search and deep links. */
@@ -167,6 +168,14 @@ export function Tabs({
167168
{...props}
168169
data-docs-tabs-root=''
169170
>
171+
<noscript>
172+
<style>{`
173+
.docs-root [data-docs-tab-panel][hidden] { display: block; }
174+
.docs-root [data-docs-tabs-root] [role="tablist"],
175+
.docs-root [data-docs-tabs-root] select,
176+
.docs-root [data-docs-tabs-root] button { display: none; }
177+
`}</style>
178+
</noscript>
170179
{items && (
171180
<TabsList aria-label={label}>
172181
{items.map((item) => (
@@ -243,6 +252,7 @@ export function TabsTrigger({
243252

244253
export function Tab({
245254
value = '',
255+
label,
246256
id,
247257
className,
248258
children,
@@ -269,6 +279,9 @@ export function Tab({
269279
className
270280
)}
271281
>
282+
<noscript>
283+
<p className='px-3 pt-4 font-medium text-docs-caption'>{label ?? value}</p>
284+
</noscript>
272285
<div className='pt-4 [&>:first-child]:mt-0 [&>:last-child]:mb-0'>{children}</div>
273286
</RadixTabs.Content>
274287
)

‎apps/docs/migration/VERIFICATION.md‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ Before opening the draft PR, the branch was rebased onto staging `d444d58541`. T
66

77
The follow-up review rebased onto staging `a0f47b1e87`, preserving its 14 updated Search pages, two replaced screenshots and one added screenshot. The compatibility inventory was reconstructed independently from that commit's Git archive using the original Fumadocs AST transform. `baseline.json` records the compatibility commit and retains the original inventory's commit and SHA-256 digest; the initial evidence remains available in commit `3bd99767ac`. The heading conflict preserves the new shared sticky-offset token, which already implements staging's anchor-positioning fix.
88

9+
The readiness audit merged staging `5facc5f2656fdc2c09b5a5e3b39476ad60f6cb49` at `179c340e8069b59d770cfc763dd42602d8c66c76`. Its compatibility inventory was rebuilt from that exact Git archive with the version-matched Fumadocs heading transform, independently cross-checked against a second Git-blob/MDX inventory. The previous compatibility inventory remains in commit `1aab14faf20b09503d986fbbf8bc2b15c2065e2b` with SHA-256 `b1d6922bf223f0dd79cc4fc097aa1d0a29e20a25def1465b962379e1150c61dc`; the original evidence fields remain unchanged.
10+
11+
The merge preserves seven upstream prose/reference updates, two updated OpenAPI specifications, two replaced Search screenshots, and the replacement of `connect-account-menu.png` with `connect-account-details.png`. These changes document the unified Integrations/account screens, reviewed-action receipts, removal of the extra Search tools gate, the 10,000-iteration condition-loop ceiling, rejected unnamed variable assignments, synchronous workflow wait timeouts and background continuation, and MCP tool output schemas. Refreshing the source inventory keeps these intentional product changes from appearing as rewrite regressions; no preservation assertion was relaxed.
12+
13+
Independent source comparison found no lost authored routes, heading anchors, code fences or operation identities against either main `a52fc509b5b8a18df519ff0781f00c8d45711164` or the new staging commit. Current staging and the merge both contain 495 authored pages, 22,012 headings, 1,236 code fences and 308 operations across seven specifications and 201 paths. All 187 staging assets and all seven specification files match the merge byte-for-byte. The remaining MDX differences from staging are component imports, shared screenshot sizing props, and the Introduction's shared Cards wrapper. The historical reports below were not regenerated by this inventory refresh and do not establish HTTP or browser verification of the new merge.
14+
915
## Preserved corpus
1016

1117
- 495 authored MDX documents and 308 generated operations across seven specifications and 201 paths.
@@ -15,7 +21,7 @@ The follow-up review rebased onto staging `a0f47b1e87`, preserving its 14 update
1521
- The 92 changed MDX files contain only 124 component-import replacements. AST comparison found no other content changes. Workflow graph, configuration, and output fixtures are retained.
1622
- Existing agent manifest `.mdx` paths and deliberate exclusions remain unchanged. Product-owned OpenAPI, CLI, integration, streaming, and manifest generators remain authoritative.
1723

18-
The full machine-readable accounting is in [report.json](report.json), with the original inventory in [baseline.json](baseline.json).
24+
Historical machine-readable verification remains in [report.json](report.json). [baseline.json](baseline.json) is the current independently reconstructed compatibility inventory; its provenance points to the original evidence in Git.
1925

2026
## Results
2127

0 commit comments

Comments
 (0)