Skip to content

feat(site[lisp]) Add the Common Lisp port - #268

Merged
tony merged 44 commits into
mainfrom
lisp-port
Nov 9, 2026
Merged

tony merged 44 commits into
mainfrom
lisp-port

Conversation

@tony

@tony tony commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add native Common Lisp documentation to the language picker and port inventory.
  • Render source-owned core and workspace guides with native API navigation.
  • Index Common Lisp symbols, concepts, packages, and tmux command usage.
  • Add an end-to-end quickstart against an owned tmux server.
  • Keep MCP absent under the port's explicit product policy.

Changes by area

API model

  • packages/api-model/src/languages/lisp.ts validates the native exporter and maps packages, CLOS types, conditions, functions, lambda lists, method specializers and qualifiers, docstrings, and exact source locations.
  • Navigation and concept registries place every exported declaration while retaining package-qualified Common Lisp names.
  • Native symbol rendering preserves dotted package names, package colons, bare function names, and keyword forms. Method signatures link whole specializer types while keeping lexical bindings plain; authored See also references render as linked prose.
  • Prose and source links use native Lisp package names and fence/sentence ownership across HTML, Markdown, and audits. Literal data stays distinct from API references; unknown Lisp APIs remain reportable.

Port documentation

  • site/src/lib/ports.ts registers the source-only SBCL port, workspace system, current toolchain, tmux floor, and publication shape.
  • Source-owned guides populate the core and workspace surfaces without copying prose into the shared repository.
  • Native API anchors resolve to the owning declaration pages, including the workspace reference landing page.
  • Generated manifests expose the port to search, version routing, inventories, and the site shell.
  • The workspace landing page quotes a source-owned example exercised by the port's package-example CI task.

Verified examples

  • The homepage program fetches the pinned source, uses its mise toolchain, starts a private tmux server, mutates panes and windows, walks the captured graph, and terminates the owned server.
  • The proof fixture retains exact program hashes, commands, output, source identity, and cleanup evidence.
  • Installed archive checks exercise workspace validation, planning, application, and repeated application from an unrelated working directory on both supported tmux endpoints. CLI errors retain partial command outcomes and uncertain dispatch evidence.
  • Capture and attachment are self-contained Lisp programs with no shell launcher. Their displayed source-checkout setup and run commands execute against owned endpoints, assert the result, and verify cleanup.
  • Live destination evidence covers the repository, source tree, ASDF definition, workspace systems, and workspace command.

Usage discovery

  • Common Lisp lexical scanning recognizes package-qualified calls and reader-safe source forms.
  • Reviewed claims connect public acquisition functions to the selected tmux command and source locations.

Design decisions

  • Treat ASDF as the Common Lisp system definition tool and mise as the runtime toolchain manager.
  • Publish core and workspace documentation from one source repository; the workspace system consumes the core system.
  • Exclude MCP because the port policy does not select a maintained Common Lisp MCP package.
  • Keep the quickstart source-owned and revision-bound rather than maintaining a second site-only program.

Dependencies

  • Add shared artwork for six language ports #263 supplies the shared Common Lisp palettes, social cards, and language icon. This draft targets its branch so CI validates the combined site without copying those assets into the Lisp branch.
  • The port-owned publisher pins both reusable workflows to the same reviewed documentation revision; update those pins to the eventual merge revision before final publication.

Draft status

  • After Add shared artwork for six language ports #263 lands, retarget this PR to main and rebase its branch.
  • Add the port-owned documentation publisher with source binding and build-only dispatch support.
  • Pass the complete shared-site and assembled-site checks with the shared artwork present.
  • Publication remains pending the shared release process; the native workflow requires explicit manual dispatch to publish.

Test plan

  • Validate native Common Lisp API extraction and declaration ordering.
  • Validate public CLOS method applicability and rendered cross-package references, including native type and function namespaces.
  • Validate homepage variants, line width, hashes, and proof records.
  • Execute the displayed full and concise quickstarts against tmux 3.8a.
  • Execute the displayed standalone capture and attachment setup, plus direct programs on tmux 3.3a and 3.8; verify normal cleanup and the capture program's failure cleanup.
  • Validate guide staging, search mentions, registry data, versions, and shell metadata.
  • Verify zero Lisp dangling references in a fresh selected-source build: 58 total against the unchanged ceiling of 60. Preserve negative controls for unknown Lisp APIs.
  • Validate package inventory for every available exact source checkout.
  • Validate Common Lisp tmux usage derivation and public acquisition claims.
  • Validate port registration, symbol forms, redirects, navigation, landing excerpts, and live destination evidence.
  • Verify the native publisher artifact and rendered mobile pages, source links, package names, and release availability.
  • Reproduce and fix native heading and unreleased-notice regressions through rendered component tests.
  • Pass the complete shared-site suite after Add shared artwork for six language ports #263 supplies the Common Lisp artwork.
  • Build and inspect the assembled Common Lisp documentation tree, including local links, anchors, artwork, navigation, and mobile layout.
  • Pass hosted checks at the final source and documentation revisions.

tony added 2 commits November 7, 2026 08:40
why: New port integrations need artwork and accessible language accents.

what:
- Add five palettes and their library, workspace and MCP image sets
- Keep reading text and surfaces neutral in both color schemes
- Record source hashes and site-specific manifest paths
why: Prepare the shared Perl identity for its port integration.

what:
- Add library, workspace, and MCP images with source digests
- Keep reading surfaces neutral and reserve teal for accents
- Describe the Perl scaffold without inventing an API example
@tony
tony changed the base branch from main to feat/language-branding November 8, 2026 01:07
@tony

tony commented Nov 8, 2026

Copy link
Copy Markdown
Contributor Author

The corrected head fixes the 12 broken links reported by the previous full assembly. Bare MCP overviews now respect explicit product exclusions. Lisp retains a language-home exit; actual unpublished MCP and workspace overviews remain reachable. No Lisp MCP route was added.

Validation:

  • PASS: generator and rendered-picker regressions first reproduced the failures; final related navigation suites pass 278 checks in 3.70s.
  • PASS: independent review runs 58 checks in 2.29s and accepts the scoped correction.
  • PASS: changed-file type-aware lint, 0.78s. Site type check passes in 44.58s with zero errors/warnings and 30 existing hints before the final one-line unpublished-overview adjustment; final lint and focused tests cover that adjustment.
  • FAIL timing gate: the repository-wide medium loop reaches its 10s deadline and terminates unfinished suites (10.63s including shutdown). This is not counted as a full-suite pass.
  • The retained selected-source dangling report remains Lisp [], total 58, unchanged ceiling 60. This navigation-only correction does not change the symbol linker.

Replacement full assembly: run 42468373722. The prior run remains failed; full rendered-link verification is pending on the corrected head. The PR remains draft and the r19 publication hold remains.

@tony

tony commented Nov 8, 2026

Copy link
Copy Markdown
Contributor Author

The common exclusion guard and regression now match OCaml's patch, using the Common Lisp slug and display name. The rendered-picker regression remains. Unpublished MCP availability handling is separate from that common hunk, and the reviewed Lua workspace exception remains intact.

Verification at 07d0a9476:

  • PASS: 278 related navigation checks, 3.20s; changed-file type-aware lint, 0.59s.
  • PASS: independent comparison of 238 route cases against the previous head, 0.35s; 58 picker checks, 2.11s.
  • PASS: code-file-only three-way merge with OCaml 8f256b463. Haskell a50f916e places the guard differently and still conflicts; the liaison has the exact difference. This is not a full-branch merge-readiness claim.
  • The bare common guard first reproduced loss of Lua's real unpublished MCP overview in 1.52s. The separate fallback preserves it without changing the shared guard.

Replacement CI 42471201414 is queued. The superseded run 42468373722 is CANCELLED, not passed. The native publisher remains pinned to the previously verified renderer f61710d7e; this is a behavior-preserving shared-site refactor. Draft and r19 publication holds remain.

tony added 24 commits November 8, 2026 14:32
why: The native Common Lisp library now has source-owned guides, API metadata and a tested real-tmux quickstart, but libtmux.org could not discover or render it.

what:
- Register Common Lisp core and workspace documentation while keeping MCP explicitly excluded
- Extract the native API, navigation, concepts, package inventory and tmux usage from exact source revision 99874b4
- Add a pinned homepage walkthrough verified against a private tmux 3.8a server
- Stage source-owned guides and generated search, registry and version metadata
why: Common Lisp needs native naming, workspace proof, and cross-port fixtures before shared docs can serve it.

what:
- Register Lisp symbol forms, source checkouts, redirects, inventory, and product excerpts
- Bind the workspace example to port CI and cache its exact source
- Cover navigation, branding titles, and destination rendering
why: Site link contracts require current evidence before exposing the Common Lisp source destinations.

what:
- Record all six Common Lisp GitHub destinations
- Refresh organization-wide destination evidence from live host responses
why: Shared CI must stage Common Lisp guides and validate its publication prefix from the exact port revision.

what:
- Fetch the pinned Lisp source for guide and example checks
- Accept and reserve the Lisp publication prefix
- Cover the source and publisher contracts
why: The staged guide cache must identify the same exact port revision as the integrated Common Lisp API model.

what:
- Point the Common Lisp guide cache at port revision 99874b4
why: The Common Lisp capabilities guide links its explicit asyncio comparison to the official Python reference, so the shared site must retain verified destination evidence.

what:
- Record the official asyncio module destination as reachable and identity-matched
why: Publish the native Common Lisp port through the shared site without losing the reviewed language-branding ancestry.
what:
- Merge the language-branding branch into the Common Lisp documentation branch
- Add native API roles, glossary terms, navigation, publisher metadata, and source-pinned generated artifacts
- Add verified attach and capture examples with explicit tmux ownership and completion semantics
why: Keep the shared API, guide, usage, and example artifacts bound to the Common Lisp publisher commit now on master.
what:
- Regenerate the native model and source path manifest at 05759bd2
- Refresh guide, usage, and example provenance from the same revision
why: The Common Lisp publisher checked out source without producing the native API artifact required by the shared model generator.

what:
- Install the exact mise-managed Lisp toolchain and restore locked Qlot dependencies
- Export and verify docs/_build/api.json before the shared site build
- Add a regression contract for producer ordering, pins, cache inputs, and export
why: The Common Lisp capture page had only one-off run evidence, and local filenames were misclassified as repository source links.

what:
- Record the exact displayed files, setup commands, toolchain, tmux version, and successful private-socket run
- Include Common Lisp example pages in the byte-for-byte example gate
- Distinguish user-created filenames from source/API references and refresh mentions
why: The Common Lisp documentation publisher now pins the shared native-artifact producer at the final trunk revision.

what:
- Bind API, source paths, guides, examples, and tmux usage to 9ccd37b119e36a901c2c7a5dceca75fa81e07978
why: The publication audit reads package ownership from a separate generated manifest catalog, which still named an earlier Common Lisp revision.

what:
- Bind the Common Lisp distribution and ASDF unit catalog to 9ccd37b119e36a901c2c7a5dceca75fa81e07978
why: Common Lisp integration must preserve the shared publisher security policy and expose every public workspace declaration.

what:
- Install locked Lisp dependencies without a shared publication cache
- Include Lisp package exports in the product reference inventory
- Link the verified capture program and test native package navigation
why: Shared API, guide and package metadata must identify the same source used by the port publisher.

what:
- Regenerate Common Lisp artifacts at the workflow-pin update
- Preserve unrelated port source identities
why: Common Lisp API headings must use package syntax, and source-only libraries must not be described as released.

what:
- Preserve Common Lisp package colons in reference headings
- Derive the unreleased notice from the shared registry state
- Exercise both rendered contracts with failing-first regression tests
why: The committed reference inputs must match the source selected by the native documentation workflow.

what:
- Refresh Lisp API, guide, example, usage and manifest source identities
why: Source guides must land on generated declaration pages, and workspace navigation needs a real reference landing page.

what:
- Map native Lisp function and type anchors to their owning API products
- Add the workspace reference index and retain revision-bound guide links
- Regenerate backlinks and cover the missing routes with regression tests
why: Native reference metadata and the workflow-selected source must retain one source identity.

what:
- Refresh Common Lisp source identities after the route publisher update
why: A copied Common Lisp example should own its tmux setup and cleanup without a separate shell launcher.

what:
- Bootstrap the owned server through the public argv operation
- Use native unwind scopes for daemon and directory cleanup
- Record exact displayed setup, endpoint runs and source hashes
why: The native connection example should own its demo fixture while preserving borrowed server lifetime.

what:
- Run a standalone Lisp program against an existing socket or an owned demo
- Prove the borrowed connection leaves its server alive before owner cleanup
- Record displayed setup, exact source hashes and isolated native runs
why: API consumers need the same bindings and defaults as the native signature.
what:
- Retain required macro destructuring as a complete binding
- Preserve printed string defaults, including empty and escaped strings
- Regenerate the native model and cover both boundary cases
why: Selected-source publication must follow the reusable workflow's cache policy.
what:
- Explicitly disable mise tool caching instead of inheriting the action default
- Check the Common Lisp producer's cache setting
why: The workspace mise task runs tests and cannot serve as the documented CLI.
what:
- Use the existing source launcher with the pinned Lisp toolchain
- Identify the shipped command script instead of the unit-test task
- Recognize extensionless scripts as source files
- Refresh Lisp destinations and manifest evidence from recorded source revisions
why: Workspace API overviews must resolve within the workspace product tree.
what:
- Align root and selected-version expectations with the workspace reference route
tony added 7 commits November 8, 2026 14:32
why: The workspace inventory now identifies the real command instead of its test task.
what:
- Expect the executable script name and source URL in both header placements
why: The reference omitted CLOS applicability and See also links, and generic
name rendering corrupted dotted Common Lisp package names.
what:
- Adapt public method specializers and qualifiers into native signatures
- Keep Lisp bindings plain and link whole package-qualified type names
- Render authored references with their native package spelling
- Refresh source-bound models and guides from the corrected Lisp exporter
- Describe CLI summaries and retained failure evidence accurately
why: Lisp declarations and source paths need native resolution while shared prose must retain its stated language and literal values.
what:
- Register Common Lisp names, fences, source paths and core namespace
- Preserve sentence ownership across HTML, Markdown and link audits
- Distinguish data literals from references and keep unknown Lisp APIs reportable
- Record source-relative paths for unresolved mentions
- Refresh Lisp inputs with linked FiveAM rerun documentation
why: The usage index must identify the same native revision as the integrated API model.
what:
- Regenerate Lisp command usage from the pinned source
- Retain the existing 58 symbol mappings at the verified revision
why: The package inventory must be bound to the same source revision as the native API model.
what:
- Regenerate the Lisp inventory and distribution revision fields
- Preserve package metadata and every other port entry
why: Language switching must not advertise an MCP page for a port that
explicitly excludes MCP.
what:
- Recognize product roots and honor exclusions in shared overview links
- Preserve authored availability overviews for unpublished products
- Cover cross-port destinations and the rendered language-home fallback
why: Concurrent language integrations need the same shared-page guard so
rebases can drop the common patch.
what:
- Use the OCaml guard and matching exclusion test with Common Lisp names
- Keep unpublished availability handling outside the common hunk
@tony
tony changed the base branch from feat/language-branding to main November 8, 2026 20:38
tony added 3 commits November 8, 2026 15:28
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.
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: The landing excerpt stopped resolving when the tested Lisp program
added an application budget to its workspace call.

what:
- End the excerpt at the call prefix instead of its exact arguments
- Keep the complete function for both cached and current source
tony added 3 commits November 8, 2026 17:32
why: The shared context factory needs each caller's site URL. Undefined
base variables stopped the sidebar audit and two standalone checks.

what:
- Preserve the sidebar, clipboard and Ruby/Lua URL bindings
- Reject undefined names in browser-check preflight
- Exercise sidebar context admission and add a focused browser mode
why: The publication audit timed out while navigating Ruby guides,
blocking qualification of the Common Lisp documentation.
what:
- Merge the shared browser-context changes from docs PR #287
- Include its follow-up corrections to helper URL bindings
- Preserve final-load, page-readiness and navigation assertions

Source: fix/guide-redirect-readiness at a437e97.
why: Common Lisp excludes MCP and publishes native workspace pages,
which the shared manifest and product checks must represent accurately.
what:
- Omit excluded products while retaining unpublished overviews
- Verify the native client identity in the exported API
- Derive product sections, headings and counterparts from source
- Assert MCP exclusion in versioned manifests and output trees
tony added a commit that referenced this pull request Nov 9, 2026
why: Lisp's agent moved its product layouts and headings to authored data and fixed the excluded MCP metadata.

what: Merge #268 at 2f8cf0d, keeping the shared source-derived product-docs and exports tests that already cover each port's authored layout.
tony added 3 commits November 8, 2026 19:14
why: Keep Common Lisp reference pages and examples aligned with the
qualified native implementation.

what:
- Pin native model, guides and example data to 37c85da
- Place daemon, format and wait helpers in existing sidebar groups
- Trace batched acquisition through its current command dispatcher
why: Package metadata must use the same native source revision as
the API model and guides.

what:
- Refresh the Lisp port and source-distribution revision to 37c85da
- Preserve the declared distribution, version and ASDF system inventory
why: Give Common Lisp its first measured cross-reference regression
bounds. The plain-token count includes t/nil literals in lambda-list
defaults, separately from unresolved prose references.

what:
- Record a resolved-reference floor of 1272 and plain-type ceiling of 70
- Measure core and workspace references for native source 37c85da
- Preserve every other port baseline and the existing checker rules
tony added a commit that referenced this pull request Nov 9, 2026
why: Lisp's agent refreshed its model, guides and examples to native 37c85da and corrected two stale revision fields in manifest-packages.

what: Merge #268 at e9b78cb.
tony added a commit that referenced this pull request Nov 9, 2026
…orts' cross-reference numbers

why: Lisp measured its own xref floor and type-link ceiling at e9b78cb; OCaml and Erlang had none, so those checks could not fail for them.

what:
- Merge #268 at 017c3d7
- keep Lisp's floor 1272 and ceiling 70, which a port-only render of the combined tree reproduced
- record OCaml's floor 4608 and ceiling 2031 and Erlang's floor 2919 and ceiling 0 from port-only renders at 7d4f88f and d9cec01, leaving every other line unchanged
why: The combined suite still expected metadata for excluded products,
while the manifest omits it. This made the Lisp export audit fail.

what:
- Adopt the combined source-derived product checks from c6171bf
- Require excluded metadata, navigation, pages and agent links to be absent
- Remove the unused documentationSectionsFor import for branch type checks
tony added a commit that referenced this pull request Nov 9, 2026
why: Lisp reproduced a defect in the combined tree: docs.json omits excluded-product metadata, but the assembled-site product-docs test dereferenced it. That suite only runs late in CI.

what: Merge #268 at d47838b, taking its product-docs test, which checks excluded products for absent metadata, navigation, tree, pages and agent links instead.
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
@tony
tony merged commit f5631d1 into main Nov 9, 2026
2 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 — 947da1f7 Deployed Nov 9, 2026 by tony via cleanup #225
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