Skip to content

Link published Perl, Erlang and Raku packages, add the Raku port, and refresh registry versions - #316

Merged
tony merged 47 commits into
mainfrom
release/r25
Nov 14, 2026
Merged

tony merged 47 commits into
mainfrom
release/r25

Conversation

@tony

@tony tony commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

Perl, Erlang and Raku now publish packages: Perl's LibTmux, LibTmux-Async and LibTmux-Workspace 0.003 on CPAN, Erlang's libtmux_erlang 0.0.1 on Hex, and Raku's LibTmux:auth<zef:libtmux> 0.0.1 on zef (Raku Land). The site still called Perl and Erlang unpublished, had no Raku port, advertised registry installs for ports that are not released, and showed registry versions from before the latest releases. This integration branch brings the site in line with what the registries publish.

Closes #313. Closes #314. Addresses #315 (shared-site part; the native README and metadata part landed in libtmux-erlang#14 and libtmux-raku#10, and libtmux-perl already carried it).

What changes

Perl on CPAN (#313)

  • MetaCPAN package and POD hosts with marks drawn for this site, Perl's registry, per-distribution destinations and cpm install --global LibTmux (plus LibTmux::Async and LibTmux::Workspace), with the source install kept as an alternative.
  • A Perl probe in scripts/gen-registry.mjs (decimal versions, skips developer and BackPAN releases) and a MetaCPAN verifier that reads fastapi.metacpan.org, because MetaCPAN's HTML answers scripted clients with a challenge page.

Per-symbol POD links (#314)

  • scripts/gen-perl-pod.mjs records each release's documented packages, file digests and heading ids in site/src/data/perl-pod.json.
  • API entries get a MetaCPAN POD action beside source: 569 methods and 26 exceptions link to their section, 27 classes and 5 methods to a module page; sync and async classes of the same name stay distinct; entries whose file differs from the release are labelled with the release version.

Erlang on Hex

  • Hex registry and the {deps, [{libtmux_erlang, "0.0.1"}]}. install, git_subdir kept as the source alternative. No HexDocs link: the package has no HexDocs.

Unreleased ports (maintainer, 2026-11-13: OCaml, Common Lisp and Julia are not released; Hackage has no Haskell release)

  • Julia's registry install (Pkg.add("LibTmux")) is replaced by the Git URL install; Julia, OCaml, Haskell and Common Lisp inventory entries move from published to configured-unpublished.
  • gen-registry.mjs derives an unreleased maturity from the core inventory status, so a Git tag no longer badges a port as released (Julia, Clojure, OCaml, Haskell, Lisp). Swift and C++, which resolve releases from tags, are unchanged.

Registry version refresh

  • A full gen-registry.mjs run: TypeScript, Rust, Java, Kotlin, Scala and Ruby 0.1.2; Go v0.1.3; Lua 0.1.1-1; C#, F#, Elixir and Swift 0.1.1. Tests that pinned 0.1.0 now read the generated data.

Source pins

  • Perl's guides, model, usage, example sources and manifests move from libtmux-perl d9fa7c527 to a1cab0324 (the 0.003 release); Erlang's from libtmux-erlang f1a2e66c0 to 539c7297c (0.0.1 plus the Hex guide fixes).
  • The Perl and Erlang landing programs install from CPAN and Hex and are re-recorded (Perl 48 of 48 native runs on tmux 3.3a to 3.8; Erlang on 3.3a and 3.8, with the record's floor corrected from 3.3 to 3.3a).

Raku port (#315)

  • Port entry with the Raku Land registry and zef install 'LibTmux:auth<zef:libtmux>'; workspace and MCP are excluded (the library publishes neither).
  • API reference from the library's own RakuAST exporter (tools/export-docs.raku, 1069 declarations at libtmux-raku 8293da87d, which writes tmux format names as code: libtmux-raku#11), guides, branding from libtmux/assets, Core home and a recorded landing example installed from Raku Land (passes all four views on tmux 3.3a and 3.8), usage scan, CI toolchain steps, and raku keys in the xref and type-link ratchets from a local Raku tree build.

Verification

  • Full site vitest on the integrated branch, outer tests included (10569 passed; staged guides, no assembled tree), astro check, and the generator and checker --check runs (verify-destinations, verify-api-destinations, gen-registry, gen-mentions, gen-example-sources, gen-manifest-packages, gen-shell-ports, gen-perl-pod, check-example-blocks, check-nav, check-palette) with their negative suites.
  • Live destination checks: 11 Perl destinations (six MetaCPAN pages confirm 0.003), the Erlang Hex page, the Raku Land page.
  • The publication suite runs in CI.

After merge

IAM trust for the merge revision and Raku's publisher roles, then caller repins and publishes; Raku's first trunk and v0.0.1 publishes follow its caller PR.

tony added 30 commits November 13, 2026 22:30
why: The maintainer ruled on 2026-11-13 that Julia is not released. General
carries none of LibTmux, LibTmuxWorkspace or LibTmuxMCP (each Package.toml
answers 404), yet the release and prerelease install forms advertised
`Pkg.add("LibTmux")` and the inventory marked every package `published`.
Only a registry release is published; the Git install is the one install.
what:
- Point the release, prerelease and git install forms at the Git URL
- Mark each Julia package configured-unpublished with its source linked
- Keep the public repository entry published
- Add package-destinations tests that hold both facts for Julia
why: The maintainer ruled on 2026-11-13 that OCaml is unreleased and
installs from source only. The opam repository carries no libtmux package
(its packages/libtmux directory and opam.ocaml.org/packages/libtmux both
answer 404), yet all six opam packages were `published`, which the
inventory reserves for a registry release.
what:
- Mark each opam package configured-unpublished with its source linked
- Keep the existing source-only install and its note unchanged
- Extend the package-destinations tests to OCaml
why: The maintainer ruled on 2026-11-13 that Common Lisp is unreleased and
installs from source only. The current Quicklisp dist (2026-01-01, 6208
systems) lists no libtmux system, and Quickdocs answers 404 for libtmux,
yet the library, its ASDF systems and its workspace command were
`published`, which the inventory reserves for a registry release.
what:
- Mark each ASDF system and the workspace command configured-unpublished
  with its source linked; keep the public repository entry published
- Extend the package-destinations tests to Common Lisp
why: The maintainer ruled on 2026-11-13 that Haskell has no Hackage
release. Hackage answers 404 for the libtmux-haskell package, yet the
release and prerelease install forms were a bare `build-depends` line that
only resolves from Hackage, and the library was `published`, which the
inventory reserves for a registry release.
what:
- Point the release and prerelease install forms at the source-repository-package form
- Mark the Cabal package configured-unpublished with its source linked
- Keep the Hackage page as a rejected candidate, so the verifier reports the day it answers
- Update the port-metadata status pin and extend the package-destinations tests to Haskell
…der instead of asking a host for it

why: A package's pinned manifest can still say `0.0.0+development` after
its first release, because the documented revision predates the version
bump. Erlang is that case: libtmux_erlang 0.0.1 is on Hex, and v0.0.1
contains the documented revision with only release preparation on top.
Asking Hex for `0.0.0+development` would call the real package absent and
block linking it. A placeholder names no release, so the verifier records
that it declines to check one, with the manifest that says so, until the
pin moves to a released revision.
what:
- Flag a `+development` version in manifestVersion and keep it out of the versions a host must carry
- Write the declined check with the placeholder's manifest as its note
- Let the every-host version test accept that note, and only that one, in place of a confirmed version
- Test that the placeholder is skipped and that real and prerelease versions are still asked for
why: LibTmux:ver<0.0.1>:auth<zef:libtmux> is on Raku Land and in the zef
ecosystem index, so the shared catalog can list Raku and link its package.
The rule is that a port appears only with a published package, and libtmux/docs
issue 315 asks for the catalog entry before any link to a Raku docs route.

what:
- Add the raku port: zef install of the auth-qualified name as the registry
  form, a source checkout as the explicit alternative, workspace and MCP
  excluded because the repository ships neither
- Add the Raku Land mark and host, with an identity rule that checks the page
  title, the version selector and the repository link, and its negative cases
- Read META6.json for the manifest inventory and probe the zef ecosystem index
  for the registry state; only the raku entries are added to the generated
  data
- Record the verified Raku Land and GitHub destinations and the header
  expectations
- Seed the Raku trunk entry in versions.json and the shell port list, and
  group Raku with the scripting languages in the picker
why: The Raku library ships its own exporter, tools/export-docs.raku, which
reads declarations with Rakudo's RakuAST and documentation from native RakuDoc.
The site needs an adapter that checks that artifact rather than parsing Raku in
JavaScript, and a model committed at the revision it describes.

what:
- Add the libtmux.raku-api/v1 adapter: it rejects uncommitted inputs, altered
  sources, unresolved RakuDoc links and invalid signature spans, and derives
  the native signature spans the shared renderer uses
- Verify in gen-api-model that the exporter bytes and compiler match the
  committed source and its .tool-versions pin
- Bind 162 shared concepts to Raku declarations and mark the rest absent
- Place a module exported by another module once in the export-group sidebar,
  with a test that fails without the fix
- Render Raku signatures natively and name the port in the shared tables
- Commit the model, sidebar and path sidecars generated from libtmux-raku at
  9a9838047f15 (1069 public declarations, none lacking documentation)
why: The libtmux Raku artwork is merged in libtmux/assets, and the port needs
its tile, social cards and palette before it has pages.

what:
- Copy the library set from libtmux/assets at 55dd6eac4347 with its digests,
  and apply the shared-root web manifest overrides the other new languages use
- Add the Raku palette, regenerate the brand CSS and catalog digests, and
  show the library tile in the port switcher
- Record the source revision and overrides in notes/branding.md
- Extend the title and project-name expectations
why: The Raku repository owns its installation guide, example programs and
compatibility policy as Markdown. The site should publish those at the
revision of the model rather than keep a second copy.

what:
- Stage README.md as Getting started, examples/README.md as Runnable
  programs and the tmux compatibility ADR as a topic, from 9a9838047f15
- Add the Core page with cards for the staged sections and the reference, and
  state the experimental status and the absence of a workspace manager or MCP
  server
- Route a selected-source Raku build through the same native model and guide
  steps as the other native ports
- Cover the Raku product exclusions and the single-card guide index
why: libtmux_erlang 0.0.1 reached Hex on 2026-11-13 (CST); its metadata
links libtmux.org and the v0.0.1 tag carries the documented source. The
site still said the application was unreleased and offered only a Git
install. Hex carries no HexDocs for the package (docs_html_url is null and
hexdocs.pm answers 404 for it), so only the package page is linked.
what:
- Name Hex as the Erlang registry and link the package page from the library entry and header
- Offer the Hex release first, pinned exactly as the package README does, and keep git_subdir as the explicit Git tab
- Make installsFor fill both the version and the revision, so a registry tab and a source tab can share a port
- Drop the Elixir-syntax pin advice from the Erlang page, whose install already pins an exact version
- Record the Erlang entry from gen-registry.mjs (release 0.0.1, tag v0.0.1) and a verified Hex evidence record
- Remove the unreleased claims and update the header, destination and port-links fixtures
- Test the registry, install forms, rendered page and evidence, and that no HexDocs reference is linked
why: LibTmux, LibTmux-Async and LibTmux-Workspace 0.003 are on CPAN, but
the committed model, guide cache and manifest packages described
libtmux-perl d9fa7c527. Its installation guide called the distributions
unreleased and offered only a source checkout, and the landing example
stated that no CPAN release was claimed. The live installation page
repeated both.

what:
- Pin Perl to libtmux/libtmux-perl@a1cab0324 and regenerate its API
  model and path data (exported with Perl 5.44.0 and PPI 1.291), tmux
  usage, guide cache, example sources, manifest packages and mention
  index with the repository's generators
- Adopt the source change between the pins: the installation guide
  installs each distribution from CPAN and keeps the source checkout as
  an alternative, the examples page lists the programs shipped inside
  each distribution beside the repository's qualification programs, and
  the filtering, graph, errors and orchestration guides were revised
- No declaration changed; only the LibTmux, LibTmux::Async and
  LibTmux::Workspace module documentation differs in the model, and the
  manifest packages move from 0.001_001 to 0.003
- Keep every reviewed tmux usage claim: all of them hold at the new
  revision, so only the usage file's revision binding moves
- Drop "No CPAN release is claimed" from the Perl landing example; the
  displayed program still needs the source checkout's fixture, so its
  recorded revision stays where the program was recorded
- Update two assertions that read the guides: the orchestration page now
  opens with "Start with a complete program", and the guides name a CPAN
  changelog file, the `libtmux.where/v1` wire format and a filter
  criterion path in code spans, which are not API and stay unlinked

Source refs: libtmux/libtmux-perl master
a1cab0324b600a5df6e34b92590b5c3bd8f79c69, previous pin
d9fa7c5278d243c671a29cdb00e3a911ac651bfa.
why: libtmux_erlang 0.0.1 is on Hex, but the committed model, guide
cache and manifest packages described libtmux-erlang f1a2e66c0. Its
installation guide offered only a Git dependency and its compatibility
guide said no registry publication was claimed, so the live installation
page told readers there was no published package. The manifest recorded
0.0.0+development, which a host answering for 0.0.1 contradicts.

what:
- Pin Erlang to libtmux/libtmux-erlang@539c7297c and regenerate its
  model and path data (exported with OTP 29.1.2 and the same exporter
  digest as before), tmux usage, guide cache, manifest packages and
  mention index with the repository's generators
- Adopt the source change between the pins: the installation guide names
  the Hex package and keeps the Git subdirectory dependency as the
  source alternative, the compatibility guide says the core package is
  the only registry publication and HexDocs is not published, and the
  README documents the Hex install
- No declaration changed; only the application file and Rebar config
  digests differ in the model's provenance, and the manifest package
  moves from 0.0.0+development to 0.0.1
- Keep every reviewed tmux usage claim: no source file under src/
  changed, so only the usage file's revision binding moves
- Link the fifteen example programs on the examples index at the new
  revision; the examples directory is unchanged, so the landing example
  and its recording stay at the revision where the program was recorded

Source refs: libtmux/libtmux-erlang master
539c7297ceae65a1cf683e0836eae0a1ccd34d64, previous pin
f1a2e66c0fa15d1e8d4efa2725a159121815293b.
why: The Raku reference needs the same sidebar buckets, short names and index
cards as the other ports, so a reader finds Server, Pane and the options
facades in the same places.

what:
- Name a top-level class by its last path segment and keep its package path in
  the id, as Perl does
- Place the 27 declarations the shared buckets did not match, and explain the
  seven that span several tasks
- List a type declared under its exporting module as a card, as Common Lisp
  does
- Keep an exception's X:: path as its short name, because it is written in full
  and not through the module that exports it
- Write Raku symbols as authored and extend the name and form tests
- Regenerate the model and sidebar sidecars from libtmux-raku at 9a9838047f15
why: Every port's landing page needs a Core overview that names the real
declarations behind each capability, and a complete program a reader can run.
The quickstart in the Raku repository is that program, and it was run
against the published package rather than a checkout.

what:
- Name the Raku Server, Session, Window, Pane and WindowLink declarations and
  the declarations behind twelve capabilities, validated against the model
- Add the homepage program, examples/quickstart.raku at 9a9838047f15, with
  its expected output. It was run after `zef install` of
  LibTmux:auth<zef:libtmux> 0.0.1 on tmux 3.8 and tmux 3.3a and printed
  `editor: 2 panes` on both
- Match the Core page description to the capabilities it claims
- List Raku among the ports with a server snapshot
why: Each kind, modifier and inherited badge in the Raku reference links to a
glossary term that explains what the word means in Raku.

what:
- Define module, class, method, property, constant, enum, typealias, function,
  exception, trait, inherited, overload, async and package for Raku, each with
  a docs.raku.org reference
- Hold Raku links to Raku documentation in the language table
why: The tmux command pages list, per language, the library methods that send
each command. Raku needs the same record, read from the library source with
Rakudo's own parser rather than text matching, and it must stay bound to the
revision of the model.

what:
- Add a Raku source reader that parses each library module with the compiler
  pinned by the library revision and credits only code, never comments,
  documentation or quoted examples
- Carry the reviewed claims, guards, not-sender reviews and preflights for
  Raku's dynamic Invocation plans, each citing a line of the pinned source
- Generate site/src/data/tmux-usage/raku.json with scripts/gen-tmux-usage.mjs
  at 9a9838047f15: 170 symbols, no unreviewed command-named method
- Install the compiler and JSON::Fast in the docs test workflow and document
  the local setup
…kflows

why: A Raku release or trunk build must run the library's own exporter with the
compiler its revision pins, and the publisher must accept the raku prefix.
Without these steps a caller workflow in libtmux-raku would fail before it
published anything.

what:
- Read the exact compiler from the selected source's .tool-versions, install
  it with Raku/setup-raku, install the declared dependencies and run
  tools/export-docs.raku in the selected checkout
- Run the Raku adapter tests in the same job
- Admit the raku slug in the publisher's port list and reserved top-level
  names, so only raku/<version> prefixes can be written
- Check out the integrated libtmux-raku revision in the docs test workflow and
  skip its native model freshness check as the other native ports do
- Add raku to the source-bound port contract the deploy tests hold
why: Each reference entry lists the guide pages that mention it, and the index
is generated from the staged guides.

what:
- Regenerate site/src/data/mentions.json with scripts/gen-mentions.mjs after
  staging the Raku guides; only Raku mentions are added
…hrough MetaCPAN's API

why: MetaCPAN answers a script's page request with a client challenge, so a
200 from metacpan.org proves nothing. The header will link a CPAN
distribution page and a module's POD page, and each needs an identity rule
before the inventory may name it. A manifest at a development commit can also
declare a developer version (0.001_001) that PAUSE never indexes, which the
version check would report as absent from the host.
what:
- Add a `metacpan` verifier for /dist/ and /pod/ pages. It reads
  fastapi.metacpan.org: the release names the distribution and its
  repository, the module endpoint says which module documents the page, and
  the rendered POD must declare that module in its NAME section.
- List MetaCPAN among the hosts that report a repository and list versions.
- Record a manifest's developer version as `developer` rather than
  `absent`, only on a host that issues none, and refuse that record for a
  release number.
- Add negative cases: the right distribution and POD, a different package,
  a different repository, none, a missing version, a challenge page, a NAME
  that declares another module, a package documented in another module's
  file, and a developer version on MetaCPAN and on a host that lists them.
why: The maintainer ruled on 2026-11-13 that Julia is not released and that
a git tag (v0.1.1) is not a registry release. The generator read a final
tag as a final release, so Julia would badge "0.x" and say "Released" while
General carries nothing. OCaml, Haskell, Common Lisp, Clojure and Perl are
the same case; four of them were unreleased only because they have no tag or
a hand-written `maturity`. The inventory already says which ports have no
registry release, so the generator gates on it instead of on the port.
Swift and C++ stay as they are: SwiftPM and their own vcpkg registry
resolve a release from its tag, and both are `published` in the inventory.
what:
- Write an unpublished entry as `maturity: "unreleased"` when the port's core inventory entry is not `published`, including an entry kept from the baseline
- Record that in the committed data for Julia, Haskell and Common Lisp
- Rewrite the Julia badge, prompt, navigation and notice tests, which asserted a "0.x" badge and "libtmux is released" from a tag, to read unreleased
- Add tests that a tag does not release a port no registry carries, that a kept baseline entry is gated, that the read can still fail on an ungated port, and that Swift and C++ are untouched
- Narrow the support page and scripts README to the rule that remains
why: The maintainer asked for a sweep of every version. registry.json
still carried the 2026-11-07 state: TypeScript, Rust, Java, Kotlin, Scala
and Ruby read 0.1.0, Go v0.1.0 and Lua 0.1.0-1, while the registries now
serve 0.1.2 (Go v0.1.3, Lua 0.1.1-1, C# and F# 0.1.1, Elixir 0.1.1, Swift
0.1.1). Install snippets, prompts and badges are generated from this file.
what:
- Run gen-registry.mjs in full: its probes and the release tags agree with each registry and with GitHub's tags
- Move Elixir, Lua, Ruby, TypeScript, Rust, Go, Java, Kotlin, Scala, C#, F#, Swift and Julia's tag to their current values
- Keep OCaml, Perl and the unreleased ports as the generator leaves them (the opam probe cannot tell an outage from absence, by design)
- Make the Ruby and Lua metadata tests read the generated data instead of pinning 0.1.0 and 0.1.0-1
…links and install guidance

why: LibTmux, LibTmux-Async and LibTmux-Workspace are on CPAN, but the Perl
header offered only GitHub directories, the install picker offered only a
source checkout, and the pages called the packages unpublished. A reader
could not tell the registry package from the native POD or the source.
what:
- Register MetaCPAN as a package host and, under the same host id, as an API
  host for POD, with a CPAN mark and a page mark drawn for this site so the
  distribution chip and the POD chip differ at icon size.
- Mark the three distributions and the workspace command published, with a
  distribution page and the POD of the main module each; the command shares
  its distribution's page. Source links stay.
- Give the port a MetaCPAN registry and POD reference, each package its
  distribution and POD page, and the install picker `cpm install --global`
  for LibTmux, LibTmux::Async and LibTmux::Workspace, with the source
  checkout kept as the explicit alternative. Mark the workspace command
  published and drop the "numbered 0.1.N" claim from its guidance, since a
  CPAN release is a decimal version such as 0.003.
- Remove the "Unpublished development distribution", "No CPAN release" and
  "do not identify published CPAN releases" text from the port metadata and
  the two Perl overview pages.
- Probe MetaCPAN in gen-registry.mjs: decimal versions sort as numbers,
  developer and BackPAN releases are skipped, and the tag is the registry's
  version text after a `v`, so 0.003 and v0.003 are recorded as they are.
  Record only Perl's refreshed entry in registry.json, and replace the Perl
  cases of gen-registry.negative.mjs, which used Perl as the port with no
  probe, with a synthetic source-only port plus CPAN cases.
- Record passing evidence for the six MetaCPAN destinations.
- Hold the Perl header actions, rows, mark order, port links, destinations,
  install commands, registry entry and the unchanged MCP exclusion in tests,
  and move the unreleased-package notice test to a port that is unreleased.
why: A reference page may link a method to its section of the POD on
MetaCPAN only if that release has the section, and the site's tests and
renderer must not request MetaCPAN, whose pages answer scripts with a
challenge. The API MetaCPAN serves does render the POD with the page's own
renderer, so a heading's id there is the fragment the page answers to.
what:
- Add scripts/gen-perl-pod.mjs and scripts/lib/perl-pod.mjs. For each
  distribution the Perl port declares in ports.ts, they read the latest
  release's provided packages, the document that documents each (a package
  with no POD is null; an exception subclass names the shared document),
  and for each document its file path, the SHA-256 of the file the release
  shipped, and the heading and item ids of the rendered POD.
- Refuse a distribution that is not the latest released one, a package
  filed under another release, a document outside lib/, and a POD whose NAME
  section names another module, including a client challenge page.
- Commit the record as site/src/data/perl-pod.json.
- Check the committed record offline in test-all.sh, with a negative script
  that shows the check failing on a dropped distribution, a bad digest, a
  package naming a missing document, a repeated fragment, a dotted release
  and a file the generator would not write. The weekly destination workflow
  also checks the record against MetaCPAN and names the old and new release.
- Describe the generator in scripts/README.md.
…lease

why: The shared reference and MetaCPAN render the same Perl distributions,
but a reader of a filter or server method had no way to open the POD that
ships in the release, and the reference showed no sign of which release a
link names.
what:
- Add a MetaCPAN POD action beside `[source]` on a declaration, from the
  API model's recorded package, parent, inheritance and owning file and the
  recorded release, with no list of pages. A module or class links its POD
  page; a method links its section when the release's rendered POD has that
  fragment and the heading is not repeated.
- Resolve the owning module from the declaring package, so an inherited
  method opens the base class's POD, the synchronous and asynchronous
  classes of one name stay distinct, and an exception subclass opens the
  shared LibTmux::X document, with its heading where the release has one. A
  method a subclass declares in a shared document falls back to the module,
  because a heading of the same name may belong to the base class.
- Link nothing for a package with no recorded release, a document in
  another file, or a declaration the release cannot be shown to contain: a
  method with no heading is linked to the module page only where the
  declaring file's SHA-256 is the release's.
- Label a link with the release version when the page documents other
  source than the release shipped. A page for a decimal release tag pins the
  link to the recorded release; trunk and previews use MetaCPAN's latest.
- Cover module and method targets, inherited members, shared-file
  exceptions, unavailable targets, release against trunk, the record reader
  (a challenge page, a wrong NAME, a package filed under another release),
  and the rendered cluster, and bind the helper in the sidebar harness.
…red checks

why: The first full test run showed Raku missing from four shared tables, and
embedding every module in the model, a mechanism for unpublished source, kept
the reference from linking the public GitHub revision the way Perl does.

what:
- Drop the embedded module copies from the Raku model after they have proved
  the recorded digests; source links open GitHub at the model revision, and the
  model is 1.2 MB instead of 1.6 MB
- Highlight Raku code with the Raku grammar
- Record the Raku port-link snapshots and the homepage proof, including the
  two tmux releases the quickstart was run on, and scope the llms-full.txt row
  of the linking guide to it
why: Perl published 0.003 to CPAN and Erlang published libtmux_erlang
0.0.1 to Hex, but the docs pinned guides, models and manifests from
before those releases, so live pages still called both unpublished.
what:
- Pin Perl source-bound data to libtmux-perl a1cab0324
- Pin Erlang source-bound data to libtmux-erlang 539c7297c
why: The Perl distributions are on CPAN; readers need registry
destinations, registry installs and links from API entries to the POD
shipped in the release (#313, #314).
what:
- Add MetaCPAN package and POD hosts, Perl registry and CPAN installs
- Record each release's POD and link API entries to its sections
why: LibTmux 0.003 is on CPAN, but the landing example still told readers
to install the core distribution from source and the recording described
libtmux-perl 36b978c5e, before the release. The example needs a
registry install with a version floor and a verification record at the
pin the rest of the Perl data now uses.

what:
- Move the landing example to libtmux/libtmux-perl@a1cab0324: the source
  tree, and the author fixture module, which gained fuller cleanup
  diagnostics; examples/quickstart.pl is byte-identical
- Add the setup command `cpm install --global 'LibTmux~>= 0.003'` and
  list cpm and CPAN access as prerequisites; the CPAN 0.003 lib/ tree is
  identical to packages/core/lib at the pin
- Record the program again with scripts/gen-core-recording.mjs from a
  clean worktree at the pin (15 steps, Perl 5.44.0, tmux 3.8a); the
  recorder's --check passes. The file is recorded afresh so its single
  revision moves with its only program
- Recompute the verification record: file and clipboard digests, the
  two-command recipe with its expected output, and the three variants
- Verified with check-example-prose.py --example home --port perl in
  every view (full, concise, errors, cleanup) on each tmux release the
  record lists, 3.3a through 3.8 (48 runs), with cpm 1.1.6 installing
  into a private prefix so the shared Perl was not changed

Source refs: libtmux/libtmux-perl master
a1cab0324b600a5df6e34b92590b5c3bd8f79c69, previous landing revision
36b978c5eb6aa33873229046037e7d26136ca2cf.
why: The Perl repin moved the manifests from the developer version
0.001_001 to the released 0.003, so the evidence recorded for the CPAN
destinations no longer matched what the manifests declare.
what:
- Re-verify the 11 Perl destinations through fastapi.metacpan.org and
  GitHub, recording 0.003 as confirmed for the six MetaCPAN pages
why: libtmux_erlang 0.0.1 is on Hex, but the landing example built the
library from a Git dependency pinned to libtmux-erlang e858027b2 and
listed Git as a prerequisite. The example needs a registry install with
a version floor, and the recording and verification record need the pin
the rest of the Erlang data now uses.

what:
- Move the landing example to libtmux/libtmux-erlang@539c7297c: its
  source tree; examples/readme_demo.erl is byte-identical
- Replace the git_subdir dependency in the displayed rebar.config with
  `{libtmux_erlang, "~> 0.0.1"}`, point the run command at the Hex
  layout (`_build/default/lib/libtmux_erlang/ebin`), and list access to
  hex.pm instead of Git; the Hex 0.0.1 src/ and c_src/ trees match the
  pin, and only the application file differs in formatting
- Record the program again with scripts/gen-core-recording.mjs from a
  clean worktree at the pin (14 steps, OTP 29.1.2, Rebar3 3.28.0, tmux
  3.8a); the recorder's --check passes. The file is recorded afresh so
  its single revision moves with its only program
- Recompute the verification record: file and clipboard digests, the
  recipe and the variants
- List tmux 3.3a, not 3.3, in the record: the library refuses 3.3 with
  unsupported_tmux_version and supports 3.3a through 3.8
- Verified with check-example-prose.py --example home --port erlang in
  every view (full, concise, errors, cleanup) on tmux 3.3a and 3.8,
  with Rebar3 fetching libtmux_erlang 0.0.1 from Hex into a private
  home directory

Source refs: libtmux/libtmux-erlang master
539c7297ceae65a1cf683e0836eae0a1ccd34d64, previous landing revision
e858027b2b204c3e621b1f74e9419c9b71e3f2f5.
tony added 8 commits November 13, 2026 23:56
why: The Raku library is published on zef as LibTmux:auth<zef:libtmux>
with a Raku Land page, and a published port gets its place in the
shared catalog, reference and landing page (#315).
what:
- Add the Raku port entry, Raku Land registry mark and zef installs
- Add the API reference from the library's RakuAST exporter, guides,
  branding, Core home, recorded landing example and usage scan
- Resolve conflicts by keeping both the MetaCPAN and Raku Land hosts,
  marks, verifiers and origins; regenerate mentions after staging
…wed link table

why: The reviewed link table is kept in address order so a review reads
as the rows that changed; the MetaCPAN rows were appended at the end.
what:
- Sort the table by address, then by address and label, as its test
  orders it
why: The outer test that loads each port's cross-reference inventory in
Sphinx listed Perl as the last port and had no Raku case, so a Raku entry
Sphinx could not read would reach the site unnoticed.

what:
- Add raku to the ports whose inventory the test writes and loads; all 12
  cases pass with the locked Python tooling
why: libtmux-raku #11 wrote tmux format names as code in the generated field
accessor docs, which the site links to its format catalog. The format catalog
coverage check was 0.807 against its 0.9 floor with the old docs; the model
needs the merged revision to carry the code spans.

what:
- Export the native API at libtmux-raku master 8293da87dc45, the merge of
  #11, from a master-pinned checkout, and regenerate the model, its path
  sidecar, the manifest inventory, the staged guide cache and the tmux usage
  record there; the usage evidence lines are unchanged
- Leave the landing example, its recording and the home fixture at 9a9838047f15:
  the program bytes are the same
- Format coverage is now 0.937 (1012 catalog and 104 other links, 75 plain of
  1191 mentions)

Source refs: libtmux/libtmux-raku master
8293da87dc45f61ea2a68d1cc5327b4e62892732, previous pin
9a9838047f1585c2c790b011cb708670999b7bdd.
why: The Raku reference wrote tmux format names as plain words, which
dropped site-wide format catalog coverage below its 0.9 floor; the
library now marks them as code (libtmux-raku#11).
what:
- Repin the Raku model, manifest, staged guides and usage scan to
  libtmux-raku 8293da87d
- Include raku in the Sphinx inventory port list
…hortened name

why: At 390px the documentation picker trigger ellipsized its whole
line, so the "unreleased" badge Julia now carries was clipped under the
product name instead of following it at the gap the list uses.
what:
- Lay the trigger name and badge out as a row in which the name
  truncates and the badge keeps its size
- Keep the one-line ellipsis for the trigger's version line
…ymbols plain

why: The release build failed its dangling-reference ceiling at 67 of
60. Main measures 58; the nine new entries came from this branch: Raku's
guides name Promise and Supply, which no inventory covered, and Perl's
0.003 guides name a CPAN Changes file, the libtmux.where/v1 wire format
and the pane.where.width.-gte query path. None is a missing libtmux
symbol, so raising the ceiling would have hidden them.

what:
- Add a curated Raku entry for Promise and Supply, pointing at
  docs.raku.org, so the guides link them as other ports link their
  language types
- Add NOT_API rules for a CPAN changelog file, a versioned wire format
  name and a query path with an operator segment; they gate reporting
  only, so a name a port defines still links
- Test both, with controls for a type, a qualified name, a field path
  and an Erlang arity that must stay candidates
…erl link fix

why: The index records each unresolved mention, and the previous commit
resolved Raku's Promise and Supply and left Perl's three non-symbols
plain, so its check called the committed index stale.

what:
- Drop the eight Raku and Perl entries the linker no longer reports
@tony
tony merged commit 15786d7 into main Nov 14, 2026
3 checks passed
@tony
tony temporarily deployed to docs-preview-cleanup November 14, 2026 16:03 — with GitHub Actions Inactive
This was referenced Nov 14, 2026

This branch was previously deployed

2 inactive deployments
docs-preview-cleanup — c10c5396 Deployed Nov 14, 2026 by tony via cleanup #246
docs-preview — c10c5396 Deployed Nov 14, 2026 by tony via publish-preview / publish #1418
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.

Link Perl API pages to their released POD on MetaCPAN Add Perl CPAN packages to shared documentation links

1 participant