Skip to content

feat(site) Add Clojure guides and native API - #276

Merged
tony merged 13 commits into
mainfrom
clojure-port
Nov 9, 2026
Merged

tony merged 13 commits into
mainfrom
clojure-port

Conversation

@tony

@tony tony commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

The Clojure façade has landed in libtmux-java #20. This change gives its users a Clojure entry in the shared site, with source-bound guides, native API reference and complete programs they can run against private tmux servers.

Summary

  • Add Clojure to the JVM language family and Java documentation caller.
  • Extract public namespaces, arities, type hints and authored docstring links with Clojure’s compiler.
  • Include complete programs with installation, isolated tmux fixtures, cleanup and expected output.
  • Document captured values, effects, bounded tasks, control output and the optional core.async adapter.
  • Integrate package inventory, source provenance, branding, search and cross-port navigation.

Changes

Native Clojure reference

packages/api-model exports compiled public vars through the owning Gradle runtime and adapts them to the shared model. It preserves package ownership, native call spelling and every arity; validates source and exporter hashes; and rejects unresolved authored docstring links. Complete API examples come from the same recorded source revision.

Clojure keyword values remain literal, including qualified keys inside maps. Native var references and Java dependency types keep their links. Shared prose resolution recognizes Clojure and preserves its own declarations when discussing the Java platform.

Fixture properties and registered Tools.deps coordinates remain data. Runtime and optional-library references link to upstream source. Façade builds respect authored page and code-fence ownership, so shared tmux and site prose does not acquire Clojure ownership. Unknown Clojure vars and packages still reach the dangling report.

Guides and discovery

site places Clojure beside Java, Kotlin and Scala in the JVM selector. The quickstart builds a session/window/pane graph, preserves captured observations across effects, waits for application output and closes its owned resources. Further programs cover layouts, bounded concurrent work, cancellation, incremental terminal output and core.async ownership. Guides are staged from the package READMEs and native documentation, with qualified reference links and optional-package navigation.

The package inventory labels both Clojure artifacts as unpublished and presents source installation accordingly. Living source links use master; pinned examples and API citations use source commits reachable from it. Module artwork, language icons and palettes follow the existing site layout. Reference metadata uses consistent text sizing.

Publication checks derive reference sections and declaration order from each native model. Product checks follow declared availability and authored routes, including unpublished overviews and excluded products, without requiring every port to expose the same sections.

Existing Java publisher

The shared workflows recognize Clojure under Java’s existing caller and prepare its JDK/Gradle toolchain. Source-selected Clojure builds regenerate their native model, guides and tmux usage data together. Deployment input validation accepts the Clojure prefix while retaining the qualified-prefix boundary.

Private-server example compatibility

The extractor also accepts the standalone Clojure catalog from libtmux-java #143. It selects the direct CLI invocation and server-ownership prose from that source while preserving launcher-based blocks from older pinned sources exactly. The JVM reader support from docs #275 is merged into the base. The current cache still uses the merged façade source; the unmerged starter API is not advertised as available.

Test plan

  • Validate native arities, ownership, source provenance and explicit docstring links.
  • Check both real Clojure example catalogs and preserve legacy rendered blocks exactly.
  • Regenerate the native model and verify freshness after committing the docs integration.
  • Verify the offline registry snapshot and its negative controls.
  • Verify destination evidence, including its date and identity negative controls.
  • Prove JVM setup and caller-selection checks fail when Clojure is omitted.
  • Check package inventory, source links, JVM grouping and publish-plan integration on the final patch.
  • Verify all reference sections and declarations against native models in the built docs.json, including rendered declaration and inventory destinations.
  • Check authored navigation routes and prove missing pages and incorrect exported declarations fail.
  • Verify product source guides use their authored navigation section, with the old Ruby expectation failing and the corrected check passing on rendered pages.
  • Run workspace TypeScript/Python lint checks.
  • Verify workspace type checks with a bounded 3 GiB Node heap and affected API-model type checks after the interlinking fix.
  • Run the displayed source installation and homepage program on both supported tmux endpoints.
  • Rebuild the selected Clojure site and audit its local links, anchors and assets.
  • Verify JVM grouping, syntax colors, metadata fonts and mobile picker bounds in Chromium.
  • Replay Clojure registration failures and run the complete related suites and staging tests.
  • Reproduce keyword-linking and prose-ownership failures, then verify their repairs through model and rendered-component tests.
  • Run the full selected-source dangling report and require zero Clojure entries without changing the shared ceiling.
  • Record the measured Clojure cross-reference floor and prove lost resolution fails.
  • Pass the complete shared-site outer loop and hosted publication audit.

The selected Clojure publisher build, local links/anchors/assets audit and desktop/mobile browser checks pass. The interlinking repair also passes through a fresh publisher build and Chromium verification. The full dangling report contains no Clojure entries and stays within the unchanged shared ceiling. The previous hosted Clojure registration failures pass in focused replay and the complete related suites. The full local outer loop still exceeds its existing 60-second budget, tracked in docs #272; complete hosted publication qualification remains pending. The local selected-port build excludes unassembled cross-port/version targets.

The shared Ruby guide navigation timeout is handled separately in docs #287. The release/combined integration brings this PR together with the shared repairs and the other new ports. Its complete hosted audit is the release gate; shared-file conflicts are resolved there, while Clojure-specific fixes stay on this branch.

Setup required

The existing Java docs.yml caller still needs a Clojure language choice and both reusable workflow pins updated to a qualified revision containing this integration and the merged standalone JVM example support. A build-only invocation with language=clojure must pass before deployment.

Companion PR

libtmux-java #20 supplies the merged façade, native documentation and installed-consumer examples.

why: External README badges can hold the load event after the Ruby
     legacy URL has reached its destination article. The shared
     assertion affects multiple port integrations.
what:
- Check the destination URL, parsed article heading and title
- Hold badge responses in a regression without raising timeouts
- Add the focused --guide-redirect browser mode

Isolated samples with staged Ruby guides compared main 9a01505
with the Perl integration ca13fe5: cold GET 7.13s versus 7.34s,
final server RSS 2675 versus 2716 MiB, and warm redirects 0.30s
versus 0.34s. This sample showed little integration growth; it did
not establish the cause of the separate hosted ECONNRESET.

On this main-based branch, held badge responses reproduce the old
load timeout. Document readiness completes within the existing
deadline. Appearance checks retain their image-completion contract.
tony added 11 commits November 8, 2026 16:43
why: Remote README badges can keep document load pending across browser
checks. Context routing alone misses redirects and can be bypassed by
later request decorators.

what:
- Create shared check contexts with an owned origin-restricted proxy
- Fulfil foreign images locally and constrain existing decorators
- Preserve load and visible-readiness assertions for legacy guides
- Exercise redirects, popups, WebSockets and failed stream cleanup
- Close owned contexts when policy registration fails
why: Clojure users need native reference and runnable guides beside the
other JVM libraries, with installation that reflects package availability.

what:
- Export public Clojure metadata through the owning Gradle runtime and
  validate source identity, arities, package ownership and docstring links.
- Stage package guides and complete programs with setup, expected output
  and private tmux fixtures; integrate search and cross-port navigation.
- Register the core and optional core.async packages, native artwork and
  JVM grouping while retaining their unpublished registry status.
- Include Clojure in Java's shared documentation caller, runtime setup
  and deployment-prefix validation.
why: The offline publication gate compares generated registry bytes with
the port catalog's order and rejects an appended Clojure entry.

what:
- Regenerate the registry offline with Clojure beside its JVM siblings.
- Preserve every package availability value and existing version record.
why: The snapshot includes current Clojure link checks, but its older
generation date makes the inventory control treat them as future evidence.

what:
- Record the generation date of the updated snapshot.
- Preserve every destination's actual individual verification date.
why: Server-owned API programs omit the shell launcher. Source-pinned
documentation must also retain earlier programs that require it.

what:
- Accept either deps.edn alone or the existing deps.edn/run.sh setup.
- Select the launch command and ownership text from the source catalog.
- Preserve legacy program blocks and reject missing dependency setup.
- Check both catalog forms and retain exact source links and run commands.
why: The shared reference needs Clojure's namespace and var model alongside
ports whose primary owner is a Server class. Missing catalog entries also
leave its examples unhighlighted and its staged guides untested.

what:
- Highlight Clojure examples and retain native namespace/var spelling.
- Cover namespaces in search, navigation and prose-link contracts.
- Register package destinations, products, redirects and staged caches.
- Match the mention audit's JDK inventory to the renderer and regenerate
  mentions and the canonical version fallback.
- Distinguish control capabilities from the core tmux floor and keep
  future-date controls independent of mixed observation dates.
why: Keyword values such as :timeout were split at the colon and linked
to unrelated Java members. Shared prose resolution also omitted Clojure
from the language and JVM ownership tables.

what:
- Tokenize ordinary, qualified and auto-resolved keywords as values
- Retain native var references and Java dependency type links
- Register Clojure prose ownership alongside the other JVM facades
- Cover keywords in maps and render the real dependency collision
why: Fixture settings, dependency coordinates and external library names
were reported as missing Clojure vars. Selected facade builds also lent
their language to shared site prose that declared no Clojure ownership.

what:
- Link runtime and optional-library references to upstream source
- Recognize known fixture settings and registered Tools.deps coordinates
- Preserve native shared prose and explicit language ownership in facades
- Keep missing vars observable and retain the shared dangling ceiling
why: The shared export test assumed a Server declaration and rejected
the valid libtmux.core namespace in Clojure's generated docs.json.

what:
- Recognize the native Clojure namespace as its reference entry point
- Preserve existing class, command and rendered-target assertions
why: New native references need not begin with a Server class, and
companion products may be unpublished or excluded. Uniform route
assumptions reject valid port documentation in the combined assembly.

what:
- Check every reference section and declaration against its native model
- Select product sections and core navigation from authored source routes
- Preserve unavailable-product distinctions from the port registry
- Record Clojure's measured cross-reference floor without changing others
why: Package source guides can belong to an existing Guides section.
The expanded publication check assumed each source guide was its own
navigation destination and rejected Ruby's valid product pages.

what:
- Use the authored section inventory to choose the source-guide destination
- Retain standalone guide sections where no Guides overview exists
- Preserve current-location, sidebar, status and destination checks
why: Publication checks require an explicit baseline for each port.
Clojure's reference has plain identifiers in its native signatures.

what:
- Record the measured ceiling of 258 plain identifiers.
- Preserve all existing port ceilings.
tony added a commit that referenced this pull request Nov 8, 2026
…uplicated

why: Local runs of CI's --check gates failed on the merged result: the API destination evidence held two records for two Java URLs, the example sources listed Perl's workspace example out of order, and the manifest packages pinned stale Haskell and Clojure revisions and lacked Lisp's.

what:
- keep the first record of each duplicated API destination URL
- regenerate example sources and manifest packages from the pinned revisions
- Clojure's measured type-link ceiling arrives with the #276 merge
@tony
tony merged commit fce1315 into main Nov 9, 2026
1 of 3 checks passed
@tony
tony temporarily deployed to docs-preview-cleanup November 9, 2026 13:38 — with GitHub Actions Inactive
tony added a commit that referenced this pull request Nov 9, 2026
…ts (#291)

why: Six ports had docs branches ready but no published site, and
three shared fixes were waiting behind them. Releasing them together
gives one docs commit to trust for deployment and one set of caller
pins to move, instead of six separate waves.

what:
- Add OCaml (#264), Haskell (#265), Erlang (#266, #278, #279, #280,
  #284, #292), Common Lisp (#268), Perl (#274) and Clojure (#276):
  native API pages, tested guides, navigation, landing and switcher
  entries, and cross-reference data for each
- Keep browser checks from loading third-party resources, and pass
  the check origin to the three scripts that named an undefined base
  (#287)
- Render guide badges at build time instead of hotlinking shields
  (#288)
- Size the reference sidebar and member bars from the viewport, so
  the Chrome iOS keyboard no longer shrinks them (#290)
- Make the OCaml model producer verify its native build inputs in
  their checkout and reject stale ones, with controls run in CI
- Offer one switcher page per port, and title Perl's workspace guide
  "Workspace guide"
- Regenerate the registry, mention index and cross-reference counts
  for the combined port set

Base main 2593131, head dabe59b. Port heads: #264 7d4f88f
and 73fb1ad, #265 dc024e3, #268 947da1f, #274 818fa2e,
#276 a134503, #287 a437e97, #292 e7740d9.

This branch was previously deployed

1 inactive deployment
docs-preview-cleanup — a1345035 Deployed Nov 9, 2026 by tony via cleanup #222
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