Skip to content

Combined release: new ports, badges, keyboard fix, check guard - #291

Merged
tony merged 292 commits into
mainfrom
release/combined
Nov 9, 2026
Merged

tony merged 292 commits into
mainfrom
release/combined

Conversation

@tony

@tony tony commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Combines every pending docs change so one CI run is the release evidence.

Merged, in order, each at its head SHA:

Integration commits on top fix the three browser checks that passed an undefined base, and the type errors left by combining the branches. Erlang's site registration is not in these PRs and is added separately.

tony added 30 commits November 8, 2026 12:45
why: A module-based value API cannot claim the server and pane operations
of the object-graph ports.

what:
- Resolve module entries against public core declarations and summaries
- Preserve strict graph role and capability validation for other ports
- Share module facts across HTML, Markdown, headings and port metadata
- Render source-pinned Cabal setup with its availability note
why: Copied test runtimes must include the same imports and readable kind labels as the production components.

what:
- Include version parsing in isolated protocol source fixtures
- Resolve the native kind helper in standalone Astro compilations
- Check readable glossary labels and native declaration kind metadata
- Read multiword kinds in Markdown member-order assertions
why: Haskell readers need a runnable example of the public package without
claiming graph navigation or tmux operations that are not exposed yet.
what:
- Display the committed Cabal project and distinguish example and library refs
- Verify pure examples with an explicit profile that rejects tmux dispatch
- Render a visible single program without unused lifecycle controls or API lists
why: Registered ports must appear in the language picker and render native
examples with the bundled syntax grammar.
what:
- Include Haskell in the compiled and native family
- Enable Haskell in the shared highlighter and Expressive Code allowlist
why: The core page now obtains its module list from structured data rather
than repeating those links in authored prose.
what:
- Regenerate the prose mention index after the module-home change
why: Cross-port assertions must cover Haskell's implemented scalar surface
without requiring an absent Server or companion package.
what:
- Record core-only products, explicit snapshot absence and source-only links
- Resolve a public PaneId declaration in selected-version prose checks
why: Generic setup and automation prompts requested operations that the
Haskell package does not yet expose.
what:
- Set up and execute the public values example without a tmux requirement
- Report unavailable automation APIs before composing task instructions
- Preserve source-ref checks across prose line wrapping
why: Haskell needs the same selected-source and prefix ownership contracts
as the other independently published documentation trees.
what:
- Register the master caller and Haskell publication prefix
- Read exact source toolchain pins before provisioning native dependencies
- Export Haddock with the committed docs producer and selected library SHA
- Check pin rejection, quoted argument boundaries and exporter failure propagation
why: Reference and command-usage citations must identify the same verified
source as the current native trunk and example source.
what:
- Regenerate native model, file inventory and usage at the selected source
- Retain the unchanged public declaration content and export groups
why: Hosted lint checks executable permissions for scripts with a shebang.
what:
- Record the Haskell toolchain reader as executable in Git
why: Haskell readers need installation and scalar API guides that match
the documented source without links to unimplemented runtime sections.

what:
- Stage committed guides at the native API revision and retain source anchors
- Derive available navigation sections and landing links from the port profile
- Check out the selected Haskell source for CI guide freshness
why: The shared release banner contradicts the Haskell package's
unpublished and untagged state.

what:
- Derive the selected port's notice from existing release metadata
- Preserve tagged-port, global and dismissal behavior
- Exercise the real notice with unreleased and tagged package states
why: Homepage browser checks assume every port offers operational tasks
and four selectable example variants. The public Haskell API is scalar.

what:
- Require one full program and no toggles for single-view examples
- Preserve program, file and clipboard checks for every supported view
- Check unavailable task guidance during language previews
- Remove stale port counts from browser summaries
why: Reader guides name standard Haskell types and Cabal files that must
resolve outside the port API rather than count as missing declarations.

what:
- Link standard types to the selected base package documentation
- Resolve tracked Haskell source and Cabal project files
- Refresh mention diagnostics while preserving missing-symbol reporting
why: Perl callers need native reference material and runnable source-package
workflows tied to the code they can install.
what:
- Preserve PPI signatures, authored POD links, source identities and command evidence
- Register core, optional async and workspace packages with source-only availability
- Add reader guides, owned examples, navigation and shared branding
- Separate compiler and catalog audits from development checks and preserve unchanged guides
- Keep model readers and preview metadata independent of native extraction setup
…t upload

why: Source-only Perl documentation needs a checked artifact from the same
pinned builder and publisher revision.
what:
- Run native model, POD link, source scan and package inventory checks after rendering
- Check shared TypeScript and Astro types before uploading the Perl tree
- Document the exact focused commands separately from publication and timing gates
why: Shared rendering needs the Python docstring parser through the reader
entry, and destination fixtures must retain their file reader after merging
the current documentation source.
what:
- Export the documentation parser without importing native extractors
- Exercise the public reader entry through the existing docstring suite
- Restore the filesystem import used by the destination evidence fixture
why: Workspace navigation and declaration breadcrumbs need a real reference
index before readers can browse the installed loader API.
what:
- Add the native workspace index using the existing product reference page
- Link the public module and versioned configuration guide
why: A release notice must agree with the selected port's registry status
when its packages are available only from source.
what:
- Derive the notice from the existing product maturity data
- Carry the selected port through shared and native layouts
- Check unpublished core and workspace pages alongside released ports
…ace links

why: Perl readers need native language definitions, accurate package destinations,
and workspace examples bound to tested source.
what:
- Register glossary terms, workspace excerpts and the manual docs caller
- Bind the public reader entry in synthetic renderers
- Refresh pinned field, example, usage and backlink data
- Preserve catalog coverage while excluding programs and signature placeholders
- Record verified primary documentation destinations and reviewed labels
why: The shared audit stages Perl guides at the committed model revision
and needs those Git objects before it can run.
what:
- Resolve and check out the pinned canonical Perl source
- Pass its path only to source-guide staging
- Keep native model freshness in the port-owned build gate
why: An unpublished source-only port has no configured registry to query
and must not stop the shared publication audit.
what:
- Keep committed package metadata when no registry is declared
- Still require a probe for published core or companion entries
- Cover online refresh and published-state counterexamples offline
why: Source-only Perl records must share a valid verification date with
the aggregate evidence used by offline destination controls.
what:
- Advance the aggregate date to the recorded Perl checks
- Expect the available-source-or-publication diagnostic
- Preserve individual dates and future-date rejection cases
why: Perl registration must pass source link ordering and guide source
checks without tying those checks to one shell redirection spelling.
what:
- Sort the reviewed Perl API links by destination and label
- Execute the guide revision block with distinct package fixtures
- Check Perl staging and native freshness boundaries explicitly
why: The assembled site rejects unresolved API mentions, and distribution names and wire literals must retain their authored meaning.

what:
- Refresh Perl models and guides from the corrected source revision
- Assert zero dangling Perl mentions while retaining real API backlinks
- Preserve shared dangling limits and sibling-port references
why: Offline builds require example and command caches to match the API model revision before version validation can run.

what:
- Refresh Perl workspace example provenance from committed source
- Align distribution and tmux usage records with the current model
- Preserve cached content, sibling data, and publication state
why: Bare product routes bypassed availability checks and linked to pages
that excluded ports do not build.

what:
- Apply product availability to bare and trailing-slash landing routes
- Retain language-home exits for unavailable products
- Render the real picker in the cross-port availability regression
…y shipped

why: Haskell has a module-first public API, an excluded MCP product and a
planned workspace package. Shared export metadata and assembled checks must
preserve those differences without linking to nonexistent pages.

what:
- Keep excluded product status and omit its unavailable document URLs
- Add an availability overview for the planned workspace package
- Check native module exports and the sections Haskell currently provides
- Distinguish unpublished overviews from products with no pages
why: Native reference groups and companion availability vary by port.
Shared assertions must preserve those differences without language branches.
what:
- Select core navigation checks from configured documentation sections
- Compare every exported reference section and declaration with its model
- Check declared product availability in root and selected-port manifests
why: Product home pages must not offer language destinations that the port excludes or does not provide.

what:
- Recognize product roots when resolving language equivalents
- Apply product availability to shared page destinations
- Keep product home shortcuts and core fallbacks within their scopes
tony added 2 commits November 8, 2026 20:08
why: Erlang exposes snapshot listings and relationships through module functions, so entity-class assumptions miss its public API.

what:
- Exercise module functions and arity-bearing names
- Check all four snapshot listings before utility members
- Preserve existing ordering bounds for other ports
why: Review and CI validation can precede permission to publish a shared-site preview.

what:
- Hold preview publication when the triggering PR has no-preview
- Keep audit, artifact upload and publisher dry-run jobs active
- Document applying the label before the triggering push
tony added 10 commits November 8, 2026 21:01
why: Destinations verified on different days remain valid even when the bundle has an older date.

what:
- Check committed evidence against the current clock
- Use fixed synthetic dates for age and future boundaries
- Preserve mixed-date coverage and the production verifier
why: Erlang reference pages must preserve the language's syntax and appear alongside its BEAM companion.

what:
- Highlight Erlang examples and define native reference labels
- Render qualified native records and group Erlang under BEAM
- Exercise module identities, source links and installation-first guides
- Preserve the existing source-link fixtures for every other port
why: Documentation assembly needs compiled Erlang documentation from the revision it is publishing.

what:
- Validate exact OTP and Rebar3 source pins before setup
- Verify the Rebar3 artifact and clean failed installations
- Run the pinned shared exporter in the selected core checkout
- Catalogue the caller and retain independent Elixir toolchain checks
…or formatter

why: Run 42548298605 failed the build at the dangling-reference ceiling: 117 against 60, 59 of them Erlang's. Forty-eight were getopt strings in the command capability table and five were rebar files and sources, none of them API symbols; one named erl_error:format_exception/3, an OTP function.

what: treat Erlang's file names and option strings as not symbols, give erl_error:format_exception/3 its OTP documentation link and record its verified destination
why: Erlang's registration stack gained its own destination-link verification, reference integration, member-order checks and the port-docs toolchain steps; the earlier merge of #292 is superseded and the combined tree carried duplicate Erlang registrations of its own.

what: Merge #292 at f4c5cf6, taking its Erlang glossary, link verification, command-reference and ordering changes and the Erlang toolchain and export steps in port-docs.yml, keeping every other port's lines, and setting OCaml's xref floor to OCaml's own 4584.
why: Erlang's destination check requires every registered port to appear in PORT_LANGUAGES, and Lisp had been merged without an entry or its HyperSpec and ASDF hosts.

what: add lisp to PORT_LANGUAGES and map www.lispworks.com and asdf.common-lisp.dev to it
why: A dotted parent prefix misrepresents Erlang functions, types and exported records.

what:
- Reuse native names for Erlang declaration headings
- Check actual record, function, type and module routes
- Preserve hierarchical breadcrumbs and other languages' headings
why: Erlang's agent moved its declaration headings to the native spelling; the combined tree carries that reference change beside Haskell's, Clojure's and Lisp's.

what: Merge #292's erlang-docs-caller-e7740d9a7 at e7740d9, adding Erlang to the ports whose page heading uses the short native name and keeping the Lisp heading check beside Erlang's.
… fields in prose

why: The release's dangling-reference gate flagged five Erlang guide mentions of names that are not API symbols (record fields, metadata entries and an unpublished workspace function). libtmux-erlang PR 4 rewrites them in plain words, and the guides, model and usage are pinned to a revision.

what: Pin Erlang to libtmux/libtmux-erlang@8f20265, a docs-only commit on top of the previously pinned sources, and regenerate its model revision, staged guides, tmux usage, manifest packages and mention index; the native declarations are unchanged.
why: Merging Erlang's heading change used an includes call on a value that may be undefined, which astro check rejects.

what: compare the page language to haskell and erlang directly
@tony tony mentioned this pull request Nov 9, 2026
13 of 15 tasks
tony added 5 commits November 8, 2026 22:21
why: The native control API adds a sixth public package, which the fixed
five-package inventory rejected during documentation builds.
what:
- Accept the known optional control package with its owning system and product
- Preserve required package, ordering and mapping checks for existing artifacts
- Cover control extraction and rejection of an incorrect system mapping
why: Lisp's native master added a sixth public package, libtmux.control, and the adapter rejected its inventory, so Lisp could not publish from master after the release.

what: Merge #268 at 947da1f, which lets the Common Lisp adapter recognize the public control package; this tree's Lisp model stays pinned to its earlier native revision.
… a dead connection

why: Run 42561686639 failed the first Markdown plant of verify-api-destinations.negative with a socket error, twice. The collector that runs between the cases and those plants reads the whole data tree and now takes longer than the stand-in server holds an idle connection, so the client reused a connection the server had closed.

what: send connection: close on every response of the stand-in server; all 332 checks pass in about five and a half minutes
why: libtmux-erlang master 6fc546e1 describes windows and window_links as snapshot relationships traversed through tmux_snapshot:related/3, not as record fields as the earlier pinned wording said.

what: Pin Erlang to libtmux/libtmux-erlang@6fc546e and regenerate its model revision, staged guides, tmux usage, manifest packages and mention index; move the reviewed tmux_select:window_links/1 source line to 76 after the added documentation. Erlang adds no dangling mention and renders 2921 resolved references.
why: The OCaml export records installed compiler artifacts and its
native exporter. Reading those paths as tracked docs inputs prevents
selected-source builds.

what:
- Hash installed interface artifacts from the selected native build
- Keep Git verification for committed interfaces
- Read native exporter files from the OCaml checkout
tony added 2 commits November 8, 2026 23:29
why: gen-api-model for OCaml read the installed compiled interface hashes with git show and its exporter paths from the docs repository, so an export at a newer native revision failed and OCaml could not publish after the release.

what: Merge exactly 5192be7, which verifies the native inputs in their own checkout; the rest of its pull request stays out.
why: The selected-source producer must read installed artifacts from
its native build and reject stale inputs without changing output.

what:
- Exercise the real generator in isolated docs and native checkouts
- Cover altered compiler bytes, source digests, tools and revisions
- Reject timeout and signal exits as evidence of input rejection
- Run the controls after the OCaml producer exports its interfaces

Producer fix: 5192be7
tony added 2 commits November 9, 2026 03:45
… workspace guide

why: The combined release's CI failed nine assembled-site checks. The
shared counterpart helper expected every page a port has under a route
or its aliases, but the page switcher offers one page per port unless
the pages declare an equivalence. Python's workspace examples page and
its builder examples page both matched, so every workspace examples page
expected one link more than the switcher draws. Perl titled its native
workspace guide "Workspace loading" where every other port, and the
navigation test, says "Workspace guide".

what:
- Offer one expected page per port in the counterpart helper: the
  port's own page before a shared one, a match on the route before a
  match on an alias, as the switcher chooses
- Keep every equivalent page when the pages declare an equivalence
- Title Perl's workspace source guide "Workspace guide", with its three
  mention rows
why: The OCaml producer now reads compiled inputs from its native
build; the controls prove it rejects stale or altered inputs without
writing output, so a publication cannot carry another checkout's API.

what: Merge ocaml/producer-paths at 73fb1ad,
which adds the producer's negative script and runs it in the OCaml leg
of port-docs.yml after the interfaces are exported.
@tony
tony merged commit 8245169 into main Nov 9, 2026
3 checks passed
@tony
tony temporarily deployed to docs-preview-cleanup November 9, 2026 13:38 — with GitHub Actions Inactive
tony added a commit to libtmux/libtmux-ocaml that referenced this pull request Nov 9, 2026
why: The shared release validates compiled OCaml inputs in their native
checkout and provides the matching publication contract.

what:
- Pin both reusable workflows to the merged six-port docs release.

Shared release: libtmux/docs#291

This branch was previously deployed

2 inactive deployments
docs-preview-cleanup — dabe59b3 Deployed Nov 9, 2026 by tony via cleanup #220
docs-preview — dabe59b3 Deployed Nov 9, 2026 by tony via publish-preview / publish #1371
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant