AtlatestRepositorysigil-irc
1# Changelog
2
3Versions are synced with Sigil releases. A missing entry indicates no changes for that version.
4
5All notable changes to this project will be documented in this file.
6
7The format is based on [Keep a Changelog](https://keepachangelog.com/),
8and this project adheres to [Semantic Versioning](https://semver.org/).
9
10## [0.10.1] - 2026-04-29
12### Fixed
14- `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### Added
18- `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-27
22### Added
24- 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### Changed
40- 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-01
46### Added
48- 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### Changed
60- Changed I/O multiplexing to use epoll (Linux) and kqueue (macOS/BSD) instead of select(2) for better scalability.
62### Fixed
64- 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-14
68### Added
70- 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### Fixed
77- 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### Other
83- 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-09
87### Other
89- 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.