Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
4e167e1
haskell(feat[docs]) Export native observation interfaces
tony Nov 9, 2026
22431c4
haskell(feat[docs]) Preserve observation reference ownership
tony Nov 9, 2026
ed62607
haskell(fix[docs]) Wrap long native type signatures
tony Nov 9, 2026
f06ffff
haskell(feat[docs]) Document capture and snapshots
tony Nov 9, 2026
77d4668
haskell(fix[docs]) Link guides to public declarations
tony Nov 9, 2026
1bde147
haskell(docs[links]) Verify the record-dot reference
tony Nov 9, 2026
dbd0b36
haskell(test[reference]) Follow the public module inventory
tony Nov 9, 2026
b32c018
haskell(test[links]) Raise the public reference link floor
tony Nov 9, 2026
514a0ce
haskell(docs[runtime]) Document shared Server lifetimes
tony Nov 9, 2026
d28aab7
haskell(test[xrefs]) Raise the resolved reference floor
tony Nov 9, 2026
60a740b
haskell(test[guides]) Include shared Runtime in reader paths
tony Nov 9, 2026
cfa95b7
haskell(feat[reference]) Export typed queries from native interfaces
tony Nov 10, 2026
549289c
haskell(test[reference]) Qualify query artifacts and authored links
tony Nov 10, 2026
45e8009
test(refactor[tiers]) Separate complete native and catalog audits
tony Nov 10, 2026
9819a54
haskell(feat[guides]) Refresh the capture and query reference
tony Nov 10, 2026
7571334
haskell(docs[home]) Show a real tmux query and linked-window results
tony Nov 10, 2026
b864dbc
haskell(fix[example]) Finish demo cleanup before returning to the shell
tony Nov 10, 2026
4900cc8
haskell(test[reference]) Cover the full exported query surface
tony Nov 10, 2026
72cb37f
Integrate shared landing and build fixes for the Haskell docs refresh…
tony Nov 10, 2026
60173ed
haskell(fix[links]) Resolve query bounds to the standard library
tony Nov 10, 2026
52aac4b
haskell(test[core-home]) Read the rendered lead through its public ac…
tony Nov 10, 2026
3450f01
examples(fix[layout]) Keep programs and setup inside narrow pages
tony Nov 10, 2026
ba55660
haskell(docs[setup]) Describe the implemented capture and query API
tony Nov 10, 2026
cc6f9fc
haskell(test[links]) Protect the expanded query reference links
tony Nov 10, 2026
43ae730
haskell(fix[discovery]) Use the public graph entry points and core de…
tony Nov 10, 2026
f48b847
haskell(test[docs]) Respect prompt task availability during hover
tony Nov 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 48 additions & 12 deletions notes/adding-a-port.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,31 @@ In the new worktree, on `docs-site`:

Haskell's [Haddock exporter](../packages/api-model/scripts/export-haskell.py)
builds a selected committed source archive. Its
[adapter](../packages/api-model/src/languages/haskell.ts) currently qualifies
`LibTmux.Id`, `LibTmux.Value` and `LibTmux.Version` with the port's pinned
GHC/Haddock toolchain. It preserves native signature links, opaque data
heads, constructor and record-label ownership, instance heads, and authored
export groups. The stored model retains those groups so sidebar regeneration
needs no checkout or native toolchain. Additional module and declaration
forms need native fixtures and qualification before the adapter accepts them.
[adapter](../packages/api-model/src/languages/haskell.ts) accepts three qualified
profiles with the port's pinned GHC/Haddock toolchain:

- Scalar v1 covers `LibTmux.Id`, `LibTmux.Value` and `LibTmux.Version`.
- Observation v2 adds `LibTmux`, `LibTmux.Server`, `LibTmux.Snapshot` and
`LibTmux.Snapshot.Fixture`. Its [native fixture](../packages/api-model/test/fixtures/haskell-observations-native/README.md)
records the library and producer revisions separately.
- Query v3 adds `LibTmux.Query` and its typed field/relationship modules. Its
[native fixture](../packages/api-model/test/fixtures/haskell-query-native/README.md)
preserves opaque type parameters and constrained signatures.

Both retain native signatures, opaque data heads, constructors, record labels,
instance heads and authored export groups. Observation field identities include
their record owner; displayed Haskell names and field types remain native.
Source links use the actual defining files, including private files behind a
public reexport, without creating private reference pages. Native source text
and line markers are checked against the committed source.

The stored model retains export groups and ordered module-reexport relations,
so sidebar regeneration needs no checkout or native toolchain. The reexport
root has its own row; it does not duplicate the target modules' declarations.
Field modules without authored groups retain Haddock's default Documentation
section. An ambiguous native source identifier retains its defining file
without an invented line. Additional module and declaration forms need native
fixtures and qualification before the adapter accepts them.

Haskell's reader guides use the routes in
[`port-documentation.ts`](../site/src/lib/port-documentation.ts). Its section
Expand All @@ -178,8 +196,11 @@ $ node scripts/stage-port-docs.mjs \
```

The command reads committed guide bytes at the API model's revision. Public
module links reach the shared reference; source fragments retain their pinned
GitHub destinations. Add the pinned source checkout to `test.yml` when a port
module links reach the shared reference. An inline link labelled with a unique
public declaration opens that declaration; a shared type/constructor name
opens the data head. Ambiguous record labels stay at the module. Source
fragments retain their pinned GitHub destinations. Add the pinned source
checkout to `test.yml` when a port
gains source-owned guides. Reading a guide checkout does not qualify native
export freshness; the port's publisher runs its selected native toolchain.

Expand All @@ -196,9 +217,24 @@ option-arity qualification. Custom `do` semantics, command-bearing pattern
bindings, tmux command separators and sends beyond the shared helper-depth
limit fail explicitly. Actual sends require a resolved scope and public
attribution; ambiguous or widely shared helpers need further qualification.
The current public scalar modules send no commands, so the generated usage
document has no symbol entries. New public operations need source evidence
and reader qualification before appearing on tmux command pages.

The queued native capture path uses a separate
[reviewed source profile](../scripts/tmux-usage/haskell-native.json).
Qualification checks the exact revision, the complete library and C-source
inventory, each file's digest, every public callable or field classification,
the full API model and native build metadata, and the
[reviewed claims](../scripts/tmux-usage/claims.json). Its parser indexes
declaration bounds for the shared evidence audit; it does not infer queued
execution from function names. A changed source, public export or claim fails
qualification until the profile is reviewed again.

Capture selects `ReadSnapshot`, whose fixed queue reaches the native spawner.
It sends `display-message` and `if-shell`; `list-clients` runs when sessions
exist. Graph enumeration uses tmux format loops. The older private scalar and
graph readers are not public capture paths. Recovery inspects or retires
existing owners without redispatch. Caller-supplied `IO` in `withServer` and
`tryTmux` is classified separately, and pure snapshot navigation has no send.
The scalar-only API retains the ordinary reader and has no command entries.

### Erlang compiler artifact

Expand Down
Loading