AtlatestRepositorysigil-irc
1
# Changelog3
Versions are synced with Sigil releases. A missing entry indicates no changes for that version.5
All notable changes to this project will be documented in this file.7
The format is based on [Keep a Changelog](https://keepachangelog.com/),8
and this project adheres to [Semantic Versioning](https://semver.org/).10
## [0.10.1] - 2026-04-2912
### Fixed14
- `irc-privmsg` and `irc-notice` now always emit the body as a `:trailing` parameter, even for short spaceless single-token bodies (e.g. `connected.`). The earlier behavior — `make-irc-command`'s "needs-colon" heuristic dropped the `:` for any body without an internal space or leading colon — produced wire that strict receivers parsed as a middle parameter, leaving `irc-message-trailing` empty and the message body lost. Surfaced in apiary's reconnect-presence broadcast (`PRIVMSG #hive connected.`) round-tripping through enclave-server and arriving at peers with empty text.16
### Added18
- `make-trailing-command` — public sibling of `make-irc-command` that unconditionally emits a `:` on the last argument. Use it for any command whose final parameter is human/agent text (PRIVMSG, NOTICE, TOPIC, QUIT, PART message, KICK reason). `make-irc-command` retains its existing per-token heuristic for commands like MODE/NICK/PING where the last argument is structurally an identifier.20
## [0.8.0] - 2026-04-2722
### Added24
- Reshaped from a client-only library into the canonical IRC protocol library for the Sigil ecosystem. Adds parser, types, capability descriptors, numeric constants, and state-machine helpers covering both client AND server flows.25
- Added IRCv3 message tags: full `@key=value;…` parsing/serialization with escape handling (`\:` `\s` `\\` `\r` `\n`), typed accessors for `time`, `msgid`, `account`, `batch`, `label`, `+draft/reply`, `+typing`, plus a tagged-line builder `make-irc-command/tags`.26
- Added `(sigil irc identity)`: qualified `<nick>@<server-domain>` identity with display + canonical accessors. Federation-readiness constraint — future CrafterNet sovereign-per-server federation requires identities to be qualified from day one.27
- Added `(sigil irc numerics)`: named bindings for 50+ numeric reply codes (welcome, MOTD, errors, SASL, MONITOR, standard replies).28
- Added `(sigil irc capability)`: capability descriptor record + parser for `LS`/`REQ` argument bodies. Tier 1 caps (`sasl`, `message-tags`, `server-time`, `account-tag`, `account-notify`, `extended-join`, `userhost-in-names`, `multi-prefix`, `away-notify`, `chghost`, `invite-notify`, `setname`, `batch`, `labeled-response`, `echo-message`, `cap-notify`) + Tier 2 caps (`draft/chathistory`, `draft/read-marker`, `MONITOR`).29
- Added `(sigil irc cap-negotiation)`: client and server CAP state machines as composable values. Multi-line `LS` continuation, atomic `REQ` enable/disable, NAK rejection, `LIST`, `END`, `NEW`/`DEL` runtime announcements.30
- Added `(sigil irc sasl)`: SASL state machines for client and server. PLAIN + EXTERNAL mechanisms ship working; chunked AUTHENTICATE base64 encoding/decoding handles the 400-char chunking spec including the empty-+ terminator. Pluggable `verify` callback for server-side credential check; pluggable `scram-driver` slot for SCRAM mechanisms.31
- Added `(sigil irc sasl-scram)`: SCRAM-SHA-256 driver per RFC 5802 / RFC 7677. Both client and server flows. Server uses a `fetch` callback to retrieve persistently stored `scram-credentials` (salt + iterations + stored-key + server-key); never stores plaintext passwords. `derive-scram-credentials` helper for use at user registration. Requires sigil-crypto v0.15.0+ (`pbkdf2-sha256`, `hmac-sha256-bytes`).32
- Added `(sigil irc batch)`: `BATCH +reftag` / `BATCH -reftag` line builders, reftag generator, and a batch-context tracker for receiving sides.33
- Added `(sigil irc chathistory)`: `CHATHISTORY` query parser/serializer for BEFORE / AFTER / LATEST / AROUND / BETWEEN / TARGETS subcommands; selector parser for `*` / `timestamp=` / `msgid=`; FAIL standard-reply error codes.34
- Added `(sigil irc read-marker)`: `MARKREAD` parser + builders for the `draft/read-marker` capability (cross-device last-read sync).35
- Added `(sigil irc monitor)`: MONITOR client-side line builder, server-side numeric reply builders for `RPL_MONONLINE` (730), `RPL_MONOFFLINE` (731), `RPL_MONLIST` (732), `RPL_ENDOFMONLIST` (733), `ERR_MONLISTFULL` (734).36
- Added comprehensive test suite covering each new module with IRCv3 spec-derived test vectors. SCRAM-SHA-256 end-to-end tests guard on crypto-primitive availability and skip gracefully on older sigil binaries.38
### Changed40
- Bumped sigil version requirement to `^0.14`.41
- Reorganized dependencies to point at extracted standalone repos (`codeberg:sigil/sigil-socket`, `codeberg:sigil/sigil-tls`, `codeberg:sigil/sigil-crypto`) instead of the old monorepo path. Bumped sigil-crypto to `^0.15` for SCRAM-SHA-256 primitives.42
- Existing client API in `(sigil irc connection)` retained unchanged for backwards compatibility.44
## [0.7.0] - 2026-03-0146
### Added48
- Added procedure specifications with inline (: ...) syntax, optional runtime checking via sigil-checks feature, and predicate combinators (any-of, maybe, list-of, none-of).49
- Added procedure specs and docstrings to all exported procedures.50
- Added procedure specs and docstrings to all exported procedures.51
- Added define-native compiler form for declaring native C bindings in Scheme modules with optional specs and docstrings.52
- Added VM-level exception handler stack for tail-optimized guard semantics, replacing prompt-based exception handling.53
- Added multi-VM threading with share-nothing architecture, message passing, and parallel-map for data-parallel workloads.54
- Added preemptive yield points at loop back-edges to prevent CPU-bound tasks from starving the async scheduler.55
- Added procedure specifications with inline (: ...) syntax, optional runtime checking via sigil-checks feature, and predicate combinators (any-of, maybe, list-of, none-of).56
- Added procedure specs and docstrings to all exported procedures.58
### Changed60
- Changed I/O multiplexing to use epoll (Linux) and kqueue (macOS/BSD) instead of select(2) for better scalability.62
### Fixed64
- Fixed false positive capture corruption check in serializer, Windows build issues with mingw macro collision and unix-connect, closure arity errors now catchable by guard, and exception handler double-pop segfault.66
## [0.4.0] - 2026-01-1468
### Added70
- Added full macro hygiene support for syntax-rules and syntax-case. Macros now properly respect lexical scope, preventing accidental variable capture that could cause subtle bugs. This release also adds `free-identifier=?` for comparing identifiers in macro expansion, and the `#'` reader shorthand for `(syntax ...)` expressions.71
- Added native C implementations of list operations (`assoc`, `assq`, `assv`, `member`, `memq`, `memv`) that were hotspots during macro expansion. This results in 2x faster test suite execution and 50% faster module compilation.72
- Added ability for `guard` to catch VM-level errors such as type errors, division by zero, and out-of-bounds access. Previously these errors would terminate the program; now they can be handled gracefully using the new `vm-error?` predicate in `(sigil error)`.73
- Added CPU and memory profiling infrastructure via the new `(sigil profile)` module. Developers can now measure execution time and memory allocation to identify performance bottlenecks in their applications.75
### Fixed77
- Fixed source file names in error stack traces. Errors now display the correct file path with line and column positions (e.g., `main.sgl:3:15`), making debugging significantly easier.78
- Fixed `with-api-docs` to correctly resolve package-centric documentation paths. API documentation generation now works correctly for all package layouts.79
- Fixed missing package dependency declaration that could cause import errors when using sigil-irc in isolation.81
### Other83
- Reduced release binary size from 3.2MB to 1.8MB through build optimizations. Smaller binaries mean faster downloads and reduced disk usage for deployed applications.85
## [0.1.0] - 2026-01-0987
### Other89
- Initial release of the test framework with assertions, test discovery, filtering, and formatted output.90
- Initial release with TCP and UDP socket support for network programming.91
- Core runtime providing a bytecode VM with incremental mark-sweep garbage collector, S-expression reader with extensible syntax, and hygienic macro system supporting syntax-rules and syntax-case. Native bindings for I/O, filesystem, networking, process management, SQLite, and cryptographic hashing.92
- Initial release with SXML utilities for XML/HTML document construction and manipulation.93
- JWT token encoding and verification with HS256 signing support.94
- Model Context Protocol server implementation for building AI tool integrations with resources, tools, and prompts.95
- SQLite database bindings with prepared statements, transactions, and result iteration.96
- Initial release of the WebAssembly runtime for running Sigil applications in the browser via Emscripten.97
- Initial release of changeset-based release management with version bumping, changelog generation, and git integration.98
- Initial release of the interactive web playground for trying Sigil in the browser.99
- Core standard library with (sigil core) providing pattern matching, records, delimited continuations, and utilities for arrays, dicts, strings, and lists. Includes modules for math operations, process spawning, time/date handling, filesystem access, and path manipulation. Nearly complete R7RS (scheme base) compatibility with additional modules for I/O, exceptions, generators, and coroutines.100
- Static site generation with composable pipeline for Markdown files and module documentation.101
- Initial release with Markdown parsing and frontmatter extraction.102
- Initial release with ANSI escape code utilities for terminal colors, bold, dim, and other text formatting.103
- Initial release with extensible hook system for REPL and application customization.104
- CSS generation from Sigil code with selectors, properties, and stylesheet composition.105
- Initial release of the code formatter with automatic indentation and parenthesis inference.106
- Initial release with declarative command-line argument parsing, supporting options, flags, subcommands, and automatic help generation.107
- Initial release of the build system with package management, dependency resolution, task execution, and executable bundling.108
- Initial release of the network REPL server for editor integration and remote evaluation.109
- Command-line interface with commands for building packages, creating standalone executables, running tests, code formatting, project initialization, documentation generation, and release management. Interactive REPL for development.110
- HTTP/1.1 server with routing, request/response handling, and server-sent events for streaming responses. HTTP client with TLS support for making outbound requests.111
- Web application framework with routing, middleware, and template rendering.112
- WebSocket client and server implementation with support for text and binary messages.113
- Git repository operations including status, staging, commits, branches, and diff inspection.114
- JSON parsing and serialization with bidirectional mapping between JSON and native Scheme types (dicts, arrays, strings, numbers, booleans). Port-based I/O for reading and writing JSON streams.115
- IRC client for connecting to IRC networks with message handling and channel operations.