Skip to content

Show the capability directory on Raku, Perl and Clojure reference pages and fix Raku order, links and code blocks - #320

Merged
tony merged 25 commits into
mainfrom
fix/raku-perl-clojure-reference
Nov 15, 2026
Merged

tony merged 25 commits into
mainfrom
fix/raku-perl-clojure-reference

Conversation

@tony

@tony tony commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

The Raku, Perl and Clojure reference pages lacked the "What is on here" capability directory the other ports show. Raku's server page also listed its members poorly, left most method names in its description unlinked and rendered its code examples as run-on paragraphs, and Perl's descriptions put no gap between a code block and the next heading.

Closes #318. Builds on #317 (this branch starts at its head); merge #317 first.

What changes

Native directories (merged upstream, repinned here)

Shell

  • api-directory.ts reads Raku code spans (hyphenated names, has-session(:name)), Perl :obj: roles and Clojure [[target]] links; Perl descriptions now fold directories too.
  • Raku member order: each -async twin is a variant of its synchronous method's concept and sorts beside it; query, options, hooks, environment and buffers map to the shared concepts.
  • Raku prose links: Raku no longer treats one-backtick spans as literal code, so names such as start, attach, run-batch and from-env link to their members (94 whole-span links, none partial); the Markdown twin links them too.
  • A heading after a fenced block in an API description gets the same gap as after a paragraph.

Data

  • Raku, Perl and Clojure models, guide caches, tmux usage, manifests, examples and mentions regenerated at the new pins. Landing examples and recordings stay at their recorded revisions (the programs did not change).

Effect

Port Owner Directory
Raku LibTmux::Server 7 rows, 46 references
Perl LibTmux::Server 10 rows, 43 references
Clojure libtmux.core/open! 9 rows, 62 references

Verification

  • Real-model directory tests fail on the previous models and pass on these; member-order, prose-link, spacing and directory-pattern tests each failed first.
  • api-model and site unit suites, type-check, oxlint, and every touched generator's --check.
  • The publication suite runs in CI.

After merge

IAM trust for the merge revision, then the Raku, Perl and Java (Clojure) repins and publishes.

tony added 25 commits November 14, 2026 07:29
…ry references

why: Lua, Rust and TypeScript server pages draw their "What is on here"
directory as a table, but the shell only folds a directory whose
reference lines use a spelling it knows for the port. Erlang, OCaml
and Common Lisp fell back to the shared rustdoc, XML doc, Javadoc and
Go forms, so a directory written in any of the three would stay prose.

what:
- Read EEP-48 code spans (`fun/1`, `mod:fun/1`, `t:type/0`,
  `c:callback/1`, `m:module`) for Erlang
- Read odoc references ({!Client.connect}, {{!x}text}) for OCaml
- Read package-qualified code spans (`libtmux:fetch-snapshot`) for
  Common Lisp
- Cover each in the per-port directory table, with an atom, a tuple,
  plain code spans and unqualified names as negatives
why: "A tmux server" pointed OCaml at Libtmux_unix.Client.t, an opaque
type alias with no documentation and no members, so the page readers
reach from every other port's server page and the core home was empty.
The module holds the client's functions and its documentation, as
Erlang's tmux_server and Elixir's LibTmux.Server do.

what:
- Point the server concept and its Eio variant at Libtmux_unix.Client
  and Libtmux_eio.Client
- Point the core home's server object at Libtmux_unix.Client
why: The client class page had no Members list, unlike every other
port's server page: Common Lisp operations are package functions, so
the adapter filed all of them under the package.

what:
- Give each libtmux function whose first required parameter is the
  client the client class as its parent; macros, functions without a
  client first and other packages keep the package
- Show such a member by its package-qualified name, as Common Lisp
  writes it, never through the class
- Test both, with controls for a function without a client, one that
  takes the client later and another package's function
why: Mapping the OCaml server concept to Libtmux_unix.Client left the
concept test expecting the Client.t type, so the test failed on the branch
before any model changed.

what:
- Expect the server concept of OCaml to resolve to the Libtmux_unix.Client
  module symbol, which carries the capability directory
…ges are HTML

why: libtmux-erlang writes its README header in HTML so ex_doc renders it: a
centered <h1> title and <a><img></a> badges. Staging read only a Markdown
title and Markdown badge images, so the Getting started page kept a second
h1 and hotlinked three img.shields.io badges and a GitHub Actions badge that
every other port serves from the site's origin. The Erlang pin to the
current master fails the off-origin badge tests until staging reads the
HTML form.

what:
- Read a centered <h1> title as the README title, as a centered Markdown
  heading already is, so the page keeps one heading
- Render the img.shields.io badges inside an HTML block to files on the
  site's origin and drop a status badge with its link, as for Markdown
  badges; refuse an HTML badge the localizer cannot render
- Share the badge rendering between the Markdown and HTML paths
- Expect a staged README written as HTML to hold no off-origin badge and no
  <h1>, and fail the badge unit test without the HTML path
why: The Erlang reference page cannot show the "What is on here" capability
directory until the model carries the prose it is built from. libtmux-erlang
PR #15 adds that directory to the tmux_server module docs, and the committed
model, guide cache and manifest still described the pre-PR master 539c7297c.
The pin is the PR head, which merges into master with a merge commit, so the
revision stays reachable after the merge.

what:
- Pin Erlang to libtmux/libtmux-erlang@33fd7fe98 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 tmux_server module doc
  gains the capability directory, and no other declaration or doc comment
  changed, so the other 324 symbols move only by line number
- Re-anchor the three tmux_server.erl evidence lines of the reviewed usage
  entries to their new positions; no claim or rule changed
- Take the rewritten README and reader guides into the guide cache: the
  README gains the send-keys and capture, query planner and command batching
  sections and an HTML header with badges, which staging now reads, and the
  guides cut their paragraph walls
- Add the three programs the repository gained, typing_demo.erl,
  plan_demo.erl and batch_demo.erl, to the examples index, link all
  eighteen at the new revision, and expect eighteen in the index test
- Leave the landing example and its recording at the revision where the
  program was recorded: examples/ gained files but the recorded program is
  unchanged

Source refs: libtmux/libtmux-erlang PR #15 head
33fd7fe985454e375d5ac8533043cabf4a0b2fa5, previous pin
539c7297ceae65a1cf683e0836eae0a1ccd34d64.
why: The OCaml reference page cannot show the "What is on here" capability
directory until the model carries the prose it is built from. libtmux-ocaml
PR #10 adds that directory to the Client module docs, and the committed
model, guide cache and manifest still described the pre-PR master 205dfda49.
The pin is the PR head, which merges into master with a merge commit, so the
revision stays reachable after the merge.

what:
- Pin OCaml to libtmux/libtmux-ocaml@ca4b6c0cb and regenerate its model and
  path data (exported with OCaml 5.5.2 and odoc-parser 3.2.2, the toolchain
  recorded in the previous model), tmux usage, guide cache and manifest
  packages with the repository's generators; the mention index is unchanged
- Adopt the source change between the pins: the Libtmux_unix.Client module
  doc gains the capability directory, and the examples moved their
  docs:begin markers so the code attached to fifteen other symbols, such as
  Client.capture, Window.panes and Workspace.client, is now the marked region
  of the program
- Re-anchor the unix/streaming.ml evidence lines of the reviewed usage
  entries to their new positions; no claim or rule changed
- Take the rewritten reader guides into the guide cache: getting started,
  bootstrap, graph, queries, control, streaming, showcases, packages,
  compatibility, status and workspaces
- Refresh the example sources cached at the model revision: the send-keys
  showcase now splits a pane, captures its screen and resizes it, and the
  graph showcase, whose excerpts feed the landing page, moved its marked
  region and module aliases without changing the excerpted lines
- Describe the send-keys showcase accordingly, add the two programs the
  repository gained, query_plan.ml and workspace_plan.ml, to the examples
  index, link all twenty-two at the new revision, and expect twenty-two in
  the index test
- Leave the Core player recording at the revision where it was recorded:
  re-recording the showcase is a separate step

Source refs: libtmux/libtmux-ocaml PR #10 head
ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9, previous pin
205dfda49742592b479247049d186956e4a4cfe9.
…tory

why: The Common Lisp reference page cannot show the "What is on here"
capability directory until the model carries the prose it is built from,
and the client class cannot list its operations as members until the model
is regenerated with the reparenting the extractor now applies. libtmux-lisp
PR #10 adds the directory to the client class docstring, and the committed
model, guide cache and manifest still described the pre-PR master e6f319c42.
The pin is the PR head, which merges into master with a merge commit, so the
revision stays reachable after the merge.

what:
- Pin Common Lisp to libtmux/libtmux-lisp@a29c6b96e and regenerate its
  model, sidebar and path data (exported with SBCL 2.6.10 and ASDF 3.3.7,
  the runtime recorded in the previous model, from a clean checkout with
  the locked dependencies), tmux usage, guide cache, manifest packages and
  mention index with the repository's generators
- Adopt the source change between the pins: the client class docstring
  gains the capability directory, and the 86 client-first functions now
  have the client class as their parent, which is the only other model
  difference besides line numbers
- Keep every reviewed tmux usage claim: no source file under src/ moved a
  cited line, so only the usage file's revision binding changes
- Take the rewritten README and reader guides into the guide cache: the
  README gains linked API sections and the guides break their paragraphs
  into bullets
- Refresh the workspace example cached for the landing page at the model
  revision: workspace.lisp gained package and explain regions, and the
  excerpted lines are unchanged
- Add the program the repository gained, drive-panes.lisp, to the examples
  index, link all eleven files at the new revision, and expect seven
  programs and four support files in the index test
- Leave the Core player recording at the revision where it was recorded:
  re-recording the quickstart is a separate step

Source refs: libtmux/libtmux-lisp PR #10 head
a29c6b96e1c78501dff5073b538ae3180b0e63e3, previous pin
e6f319c4257789cfe39547af001c718975f0a2ef.
…dels carry their directory

why: The directory readers for Erlang, OCaml and Common Lisp were tested
against synthetic prose only, so a model pinned before the native docs gained
their directory passed every test while the reference page showed no table.
The same gap hid that the Lisp client class had no members until the model
was regenerated with the reparenting.

what:
- Fold the real doc of tmux_server, Libtmux_unix.Client and libtmux:client
  with groupDirectory and expect a directory of eight rows, each naming at
  least one member
- Expect the Common Lisp client class to be the parent of its client-first
  functions, such as fetch-snapshot and send-text
- Both checks fail on the models pinned before the three repins: no
  directory on any of the three owners and no members on the client class
… longer makes

why: At the new Common Lisp pin the concurrency guide says "There is no
asyncio or event-loop integration" in plain prose; the earlier text put
`asyncio` in a code span, which linked Python's asyncio module. The
evidence still held that destination, so the destination check failed:
the evidence names a link no source generates.

what:
- Remove the docs.python.org asyncio module row from the API destination
  evidence (`verify-api-destinations.mjs --missing`: no request made, only
  the row no source generates is dropped)
why: libtmux-perl's README now shows a shields CPAN version badge for each
distribution (cpan/v/LibTmux and the Async and Workspace distributions).
Staging the README from master threw "unsupported badge", so the Perl
docs build stopped before it published.

what:
- Map shields' cpan version service (label "cpan", no qualifier) to the
  registry version of the named distribution, which registry.json already
  carries for all three Perl distributions
- Cover it with the registry badge table in port-guide-badges.test.ts
why: The Java Gradle install named libtmux-bom:0.1.0 and the Swift
Package.swift install named from: "0.1.0" as literals, so the registry
refresh to Java 0.1.2 and Swift 0.1.1 left both landing pages offering
the first release while every other port's install moved.

what:
- Write both installs with the {version} placeholder that installsFor
  fills from the registry entry (or the page's own release on a versioned
  tree)
- Word the Swift note for any release
- Test that the Java and Swift installs name the registry's version
…ise and keep -async twins beside their originals

why: The Raku `LibTmux::Server` page ranked `snapshot` 2nd and `snapshot-async`
45th: no `-async` twin was a concept variant, so all seven sorted by name in the
tail, up to 43 places from the method they mirror. 31 of the 46 members ranked
by name alone, so `options`, `hooks`, `environment` and the `query-*` selections
sat among `clone` and `max-output-bytes`.

what:
- Record each `-async` twin of a concept method as a variant of that concept
- Map `query-sessions`, `query-windows` and `query-panes` to the search
  concepts that Perl and Lua map their query methods to, with `query` and
  `query-async` as variants because they take the entity as an argument
- Map `options` to `server-options` and `global-options`, and `hooks`,
  `environment` and `buffers` to the server hooks, server environment and
  list-buffers concepts, as variants beside the facade method that realises each
- Map `open-control` and its twin to `attach-session`, as Rust and Java map
  their control-mode attach
- Leave unmapped what realises no shared concept: `new`, `close`, `endpoint`,
  `explain`, `owned`, `query-window-links`, `key-bindings` and the size limits
- Let a Raku twin read its original's tier, concept and mention count when it
  has none of its own, and sort a twin by its original's name, so a twin follows
  its original when only the original has a concept or is discussed in a guide
… class being described

why: On the Raku `LibTmux::Server` page, `start`, `attach`, `snapshot`,
`run-batch`, `from-env` and `capabilities` rendered as plain code although
`Server` declares each. The Raku tokenizer was configured with `literal-code`,
copied from Haskell, so every one-backtick span became a `code` span and never
reached the resolver; the page linked only the tmux command names that
`linkTmuxDoc` finds in code spans (`new-session`, `kill-server`). The exporter's
padding (`` ` start ` ``) is not the cause: the tokenizer already strips one
space from each side as CommonMark does, and the live page shows `start`
unpadded.

what:
- Drop `literal-code` from the Raku doc syntax, so a one-backtick span is a
  reference resolved from the class being described outward; a doubled span
  stays literal
- Leave a Raku span that names no symbol whole as plain code: its hyphens and
  `:adverb(...)` colons read as operators between names in the shared literal
  tokenizer, which linked `:deadline(Instant)` to `Report.deadline`
- Test padded and unpadded spans against the committed model: each Server
  method links to its own member, `capabilities` goes to Server's from Server and
  to Snapshot's from Snapshot, and `TMUX`, `:parse-only` and a doubled span link
  nothing
- A tmux command that is also a member (`new-session`, `kill-server`) now links
  its member on the HTML page; the Markdown export keeps the tmux link
why: On the Perl `LibTmux::Server` page the CONTRACT heading sat directly under
the SYNOPSIS code block. Perl writes a POD heading as `p.rubric`, and the body
prose rule `dl.py > dd .gp-sphinx-api-description p` (0,2,3) outranks the rubric
rule `dl.py > dd .rubric` (0,2,2), so the heading takes no top margin and gets
its gap only from the paragraph above it: 8px after a paragraph, 0 after a
code block, which has no margin of its own.

what:
- Give `.gp-sphinx-api-description > .api-prose-code` the 0.5rem bottom margin
  a paragraph has; two adjacent blocks still collapse to their 1rem gap, and
  the last block of a body is still trimmed to 0
- Test with the shipped stylesheets in Happy DOM that the gap after a code
  block equals the gap after a paragraph and that the test fails at 0 without
  the rule
…rences and fold Perl's

why: The Raku, Perl and Clojure server pages cannot show the capability
directory once their native docs carry it. `BY_PORT` had no entry for the three,
so they read the shared rustdoc, XML, Javadoc and Go spellings, which none of
them writes (a Go link `[Server.Kill]` folded a row on all three), and none of
the three spellings their exporters hand over folded. `ApiProse` also skipped
the fold for Perl, because a Perl heading is a section anchor and a
heading-led row would drop its id.

what:
- Read Raku's code spans of method and type names, padded or not, with an
  optional call (`has-session(:name)`), and a package-qualified name with its
  method (`LibTmux::Server.start`); a name with only a short qualifier is no
  reference, as the tokenizer's index leaves it unresolved
- Read Perl's `:obj:` role, which Pod::Simple's `L</name>` becomes, with the
  pattern Haddock already uses; a Perl code span stays literal
- Read Clojure's cljdoc wiki links, `[[open!]]`, `[[libtmux.data/windows]]` and
  `[[target label]]`, with the target characters the tokenizer accepts
- Fold only bold-led rows for Perl, so a POD heading keeps its anchor, and call
  `groupDirectory` for every port in `ApiProse`
- Test each port's references against fixtures shaped like its docstring (a
  heading, bold-led rows, a reference paragraph and a `- Label: refs` list), its
  negatives (a prose sentence with a code span or link, adverbs, variables, a
  Go link), and a rendered `ApiProse` that failed for Perl before
…it names

why: The Server description writes `has-session(:name)` and `has-session(:id)`,
and the directory reader accepts a Raku call with its arguments. The index
resolved only an empty call, so a call with an adverb stayed plain although the
guide resolver already resolves `has-session(:name)` to `Server.has-session`.

what:
- Resolve a Raku name followed by an argument list to the name before the
  parenthesis, for a bare, a qualified or a method name
- Leave a call on a variable, `$server.has-session(:name)`, and a call of a name
  nothing declares as plain code
why: The Raku reference page cannot show the "What is on here" capability
directory until the model carries the prose it is built from. libtmux-raku
PR #16 adds that directory to the LibTmux::Server class doc and fixes how the
exporter writes the doc, and the committed model, guide cache and manifest
still described the pre-PR master 8293da87d. The pin is the merge commit of
the PR, which is on master.

what:
- Pin Raku to libtmux/libtmux-raku@ae97f9f87 and regenerate its model and path
  data (exported with Rakudo 2026.09, the compiler recorded in the previous
  model; the exporter digest moves because tools/export-docs.raku changed),
  tmux usage, guide cache, manifest packages and mention index with the
  repository's generators
- Adopt the source change between the pins: the Server doc gains the
  directory, Pod code blocks are fenced as raku, code spans are written
  without padding and wrapped list items keep their indent; the model keeps
  1069 symbols with none added or removed and 95 docs changed
- Keep every reviewed tmux usage claim: no evidence line moved, so only the
  usage file's revision binding changes
- Take the rewritten README and examples guide into the guide cache: the
  README becomes task sections with linked API headings, and the examples
  guide lists the two programs the repository gained, explain-query.raku and
  resize-panes.raku
- Move the mention index with the new guides: one symbol mention gained, one
  lost, and the README's file name `quickstart.raku` reads as a dotted name
  nothing declares, which takes the dangling count from 56 to 57 against a
  ceiling of 60
- Leave the landing example, its recording and the home fixture at
  9a9838047f15: quickstart.raku is unchanged between the pins

Source refs: libtmux/libtmux-raku master
ae97f9f87b73db63d4ab3cabb108a195f64e4f6f (PR #16), previous pin
8293da87dc45f61ea2a68d1cc5327b4e62892732.
why: The Perl reference page cannot show the "What is on here" capability
directory until the model carries the prose it is built from. libtmux-perl
PR #20 adds that directory to the LibTmux::Server module doc, writes each entry
as a POD link the Perl adapter turns into an API reference, and makes the
exporter dedent verbatim blocks and export POD lists. The committed model,
guide cache and manifest packages still described a1cab0324, the 0.003 CPAN
release, which predates all of it. The pin is the merge commit of the PR, which
is on master.

what:
- Pin Perl to libtmux/libtmux-perl@388f27171 and regenerate its API model and
  path data (exported with Perl 5.44.0 and PPI 1.291, the toolchain recorded
  in the previous model; the exporter digest moves because
  scripts/export-api.pl changed), tmux usage, guide cache, example sources,
  manifest packages and mention index with the repository's generators
- Adopt the source change between the pins: the LibTmux::Server doc gains the
  directory and SYNOPSIS blocks and lists are exported as written; the model
  keeps 634 symbols with none added or removed and 51 docs changed
- Keep every reviewed tmux usage claim: all of them hold at the new revision,
  so only the usage file's revision binding moves
- Take the restructured README and reader guides into the guide cache: eleven
  of the twelve guides changed, and the examples guide lists the four core
  programs the repository gained, explain.pl, graph.pl, input.pl and select.pl
- Move the cached examples/workspace.pl to the new revision; its bytes are
  unchanged
- Review the six README badge links to the three CPAN distribution pages,
  each in the shields form the guide cache keeps and the localized form the
  stager writes; the destinations already have passing records, so the
  evidence file is unchanged and `verify-api-destinations.mjs --missing`
  requests nothing
- Leave perl-pod.json as it is: it records the latest CPAN release, which is
  still 0.003, and `gen-perl-pod.mjs --check` reports it current
- Move three POD-link tests from LibTmux::Server to LibTmux::Pane: they
  assumed the page's source is the file the 0.003 release shipped, which
  Server.pm no longer is, so its POD link now names the release and says the
  page documents other source; every other module still matches the release
- Leave the landing example, its recording and the home fixture at
  a1cab0324b60: examples/quickstart.pl and scripts/lib/LibTmuxFixture.pm are
  unchanged between the pins

Source refs: libtmux/libtmux-perl master
388f27171ee6256dc7dbaef6f878d394f9ca474a (PR #20), previous pin
a1cab0324b600a5df6e34b92590b5c3bd8f79c69.
why: The Clojure reference page cannot show the "What is on here" capability
directory until the model carries the prose it is built from. libtmux-java
PR #165 adds that directory to the libtmux.core/open! docstring, with each
entry written as a cljdoc [[name]] link, and the committed model, guide cache
and manifest packages still described 941f2162. The pin is the merge commit of
the PR, which is on master.

what:
- Pin Clojure to libtmux/libtmux-java@9cbaef3e0 and regenerate its model and
  path data (exported with Clojure 1.12.6 through the repository's Gradle
  exporter, 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 open! docstring gains the
  directory, and no other declaration or doc comment changed; the model keeps
  90 symbols with none added or removed, and the other 32 differ only in the
  revision their example install commands check out
- Re-anchor the reviewed usage entries to their new positions, 108 lines
  later in core.clj and six later in Pane.java; no claim or rule changed
- Take the reader guides into the guide cache: the Clojure guide and the two
  package READMEs
- Link the thirteen example programs on the examples page at the new revision;
  the programs are unchanged between the pins, and the mention index is
  unchanged
- Leave the landing example, its recording and the home fixture at
  941f2162062b: the change to core.clj is documentation only
- Leave the Java, Kotlin and Scala models at a0ecbc16d: PR #165 changed only
  Clojure sources, and moving those three models adopts the 325 commits since
  that revision, which is a separate repin

Source refs: libtmux/libtmux-java master
9cbaef3e0949fb4a76e5f259f3cb04bf5ebba46e (PR #165), previous Clojure pin
941f2162062b6d118c68b7d1c23417e0d2cea124.
…dels carry their directory

why: The directory readers for Raku, Perl and Clojure were tested against
synthetic prose only, so a model pinned before the native docs gained their
directory passed every test while the reference page showed no table, as the
three server pages did until their repins. The Raku page also depends on the
exporter fencing its code blocks, which no test read.

what:
- Fold the real doc of LibTmux::Server on Raku and Perl and of
  libtmux.core/open! on Clojure with groupDirectory and expect a directory of
  seven, ten and nine rows holding 46, 43 and 62 references, each row naming
  at least one
- Expect the Raku Server doc to carry fenced raku code blocks and to link
  start, attach, run-batch and from-env to the members of Server
- The three directory checks and the Raku check fail on the models pinned
  before the three repins: no directory on any of the three owners and no
  fenced block on the Raku Server
…age does

why: The Markdown export of a symbol links a code span to the member it names
only for the ports listed in `symbolMarkdown`: Perl, PowerShell, Scala,
TypeScript, OCaml and Haskell. Raku was missing, so the Markdown of
`LibTmux::Server` left `start`, `from-env`, `run-batch` and every other method
name plain, and linked only the tmux command names, while the HTML page links
each of them to its member.

what:
- Add raku to the ports whose descriptions the Markdown export resolves
- Test against the real Raku model that the Server description's `start`,
  `from-env`, `run-batch` and `snapshot` link to a page of the Raku reference
  and not to the tmux manual; the test fails with raku missing from the list
…ribes

why: a3ba4d5 made a one-backtick Raku span a reference, and a bare name
then fell through to the global name lookup, which takes a member of any
class that shares the name: `bell` on LibTmux::Catalogue, a list of tmux
format names, reached WindowLink.bell, and `outcome` on LibTmux::Command
reached Batch::Report.outcome. The guard against another class's member hid
the plain words on the page, but site/test/literal-links.test.ts compares
the page with the same linker minus that guard, so the docs PR's CI failed
on 58 new dropped rows. The guard also dropped what is right on
LibTmux::Selection, where `where`, `filter` and `first` are members of
Selection::Selection, the module's own class, which is not a type that
encloses the page. A hyphenated name never reached the guard, so
`timeout-ms` on LibTmux::Transport linked Control::Connection.timeout-ms.

what:
- Resolve a bare Raku name, a plain word or a hyphenated or capitalised
  identifier, only from the symbol described, the types that enclose it and
  the class a module is named for; a name no class in scope declares stays
  plain code, and a type, a module, a function, a qualified name and a call
  resolve as before
- Let an identifier (`to-json`, `ACCEPTS`) also name a member of a class
  declared directly in the module described, as the Query page does for
  Filter; a plain word does not, as `reset` on the Model page is a shell
  command and not PaneRef.reset
- Use the same scope in the other-owner guard for Raku, so the correct
  links on the Selection and Query::Plan pages survive it
- Test the rule against the committed Raku model: Catalogue's `bell`, `x`
  and `status` and Command's `outcome` resolve to nothing, Selection's
  `where`, `filter`, `first` and `map` link, Server's `start` links
- Leave the reviewed link lists as they are: the 58 new guard-dropped rows
  no longer exist, so none is added

Raku prose links, whole span, before and after: 160 to 132. 44 are lost:
29 Catalogue field names that reached an attribute of another class, 9 on
the LibTmux overview, 6 on Batch and Transport that reached
Control::Connection. 16 are gained: 14 on the Selection, Layout and
Query::Plan pages, 2 Server methods on the overview.
…port's mount

why: Erlang's README header is HTML (written for ex_doc), so its localized
badges reach the page as raw `<img src="/badges/…">` tags. The site-root
rewrite only visits elements, so those paths stayed root-absolute: the
PR preview's isolation check found them escaping /pr-317/, and on
libtmux.org /badges/ at the root answers 403, so the badges would ship
broken.

what:
- Rewrite `src="/badges/…"` inside raw HTML nodes with the same own-mount
  rule a Markdown badge takes (the port build's mount, under any preview
  root)
- Test both the port mount and a preview root for an HTML header badge
why: #320 builds on #317 and must carry its fix for the HTML header badges, which escaped the port's mount and would 403 on libtmux.org.

what:
- Bring in cd4b4fc (rehype-site-root rewrites raw-HTML /badges/ sources with the port's mount)
@tony
tony merged commit 94b1e40 into main Nov 15, 2026
3 checks passed
@tony
tony temporarily deployed to docs-preview-cleanup November 15, 2026 03:28 — with GitHub Actions Inactive

This branch was previously deployed

2 inactive deployments
docs-preview-cleanup — 75400c2e Deployed Nov 15, 2026 by tony via cleanup #248
docs-preview — 75400c2e Deployed Nov 15, 2026 by tony via publish-preview / publish #1427
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.

Raku, Perl and Clojure reference pages lack the directory table, member order and links of other ports

1 participant