aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-02-08 18:46:23 +0700
committerShulhan <ms@kilabit.info>2026-02-08 18:46:23 +0700
commit7461efda2efa7eacf92376188ee0d7307e05f73e (patch)
treedf462d54ab0895f90ded734c7783127ecd44d0e4
parent9766d6417c9e87b8e34524836cbcd2622834b1c0 (diff)
downloadpakakeh.go-7461efda2efa7eacf92376188ee0d7307e05f73e.tar.xz
_doc: split the changelog for 2025
While at it, use consistent title in the changelog files.
-rw-r--r--CHANGELOG.adoc408
-rw-r--r--README.md5
-rw-r--r--_doc/CHANGELOG_2018-2019.adoc2
-rw-r--r--_doc/CHANGELOG_2020.adoc2
-rw-r--r--_doc/CHANGELOG_2021.adoc2
-rw-r--r--_doc/CHANGELOG_2022.adoc2
-rw-r--r--_doc/CHANGELOG_2023.adoc2
-rw-r--r--_doc/CHANGELOG_2024.adoc2
-rw-r--r--_doc/CHANGELOG_2025.adoc426
9 files changed, 441 insertions, 410 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 33346064..dd55a400 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -1,14 +1,16 @@
-// SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2026 M. Shulhan <ms@kilabit.info>
= pakakeh.go CHANGELOG
:std_url: https://pkg.go.dev
:sectanchors:
-:sectlinks:
:toc:
This Go module usually released every month, at the first week of the month.
+link:CHANGELOG_2025.html[Changelog in 2025].
+Changelog for `pakakeh.go` module since v0.59.0 until v0.60.2.
+
link:CHANGELOG_2024.html[Changelog in 2024^].
This is changelog for `pakakeh.go` module since v0.52.0 until v0.58.1.
@@ -34,9 +36,9 @@ Legend,
* 🌼: Enhancement
* 💧: Chores
-//{{{
[#v0_61_0]
== pakakeh.go v0.61.0 (2026-xx-xx)
+//{{{
**🌼 cmd/httpdfs: implement systemd socket activation**
@@ -211,403 +213,3 @@ and copyright format to comply with SPDX formats.
[1] https://kilabit.info/project/spdxconv/
//}}}
-//{{{
-[#v0_60_2]
-== pakakeh.go v0.60.2 (2025-12-27)
-
-This is periodic and last release of pakakeh.go for year 2025.
-There is no changes on code level only on documentation.
-
-In the _doc, we merge the index.adoc into README.md so we can served the
-_doc directory under https://kilabit.info/project/pakakeh.go .
-We also fix some broken links in documentation files.
-
-In lib/time, add missing "Hourly" section in the package documentation.
-
-The go.mod is updated to use Go 1.24.0 as minimum version; and all
-dependencies has been updated to latest release.
-
-//}}}
-//{{{
-[#v0_60_1]
-== pakakeh.go v0.60.1 (2025-04-18)
-
-[#v0_60_1__lib_bytes]
-=== lib/bytes
-
-[NEW FEATURE] +
-New method Peek in Parser.
-The Peek method take a look on n bytes inside the buffer without
-using delimiters.
-The returned bytes may empty or have length less than n.
-
-//}}}
-//{{{
-[#v0_60_0]
-== pakakeh.go v0.60.0 (2025-02-01)
-
-Some changes that affected almost all packages are by replacing
-"interface{}" with "any" (added since Go 1.18),
-using for-range on numeric value (supported on Go 1.22).
-
-
-[#v0_60_0__lib_bytes]
-=== lib/bytes
-
-[BREAKING CHANGES] +
-We remove Copy and Concat functions in favor of standard library.
-Since Go 1.20, the standard bytes package have the Copy function.
-Since Go 1.22, the standard slices package have the Concat function.
-
-[BREAKING CHANGES] +
-We also remove "lib/bytes.AppendXxx", "lib/bytes.ReadXxx", and
-"lib/bytes.WriteXxx" in favor of standard library.
-Since Go 1.19, package "encoding/binary" support appending byte order.
-The ReadXxx and WriteXxx can be replaced with standard library
-BigEndian/LittleEndian UintXxx and PutUintXxx.
-
-
-[#v0_60_0__lib_debug]
-=== lib/debug
-
-[BREAKING CHANGES] +
-The global Value variable has been removed.
-Using global variable inside one package is a mistake.
-If, for example, package X set debug.Value to 1, another packages that
-does need to be debugged will print unnecessary log messages.
-
-
-[#v0_60_0__lib_dns]
-=== lib/dns
-
-[BUG FIX] +
-We fix unpacking HTTPS where the response answers contains RR other than
-SVCB parameters, for example CNAME.
-
-[ENHANCEMENT] +
-This release now detect invalid response header earlier, like invalid op
-code and response code, before we continue unpacking the rest data.
-Previously, we unpack the header and then question without
-detecting whether the header itself is valid or not.
-This cause the unpacking question return an error like
-
- label length overflow at index xxx
-
-One of the case is when someone sent random or HTTP request
-to DoT port.
-
-[ENHANCEMENT] +
-In the logging part, we improve the logging prefix on serveTCPClient.
-The serveTCPClient is used to serve TCP and DoT clients.
-Previously, the error returned from this method is prefixed based on the
-kind, for example
-
- serveTCPClient TCP: ...
- serveTCPClient DoT: ...
-
-This changes pass the log prefix to the method so now it become
-
- serveTCPClient: ...
- serveDoTClient: ...
-
-
-[#v0_60_0__lib_http]
-=== lib/http
-
-[ENHANCEMENT] +
-On server with TryDirect is true, a GET request to a directory now always
-rescan the content and the generate the new "index.html".
-
-In the generated "index.html" we display the file time in UTC instead of
-local time.
-
-The ParseContentRange function now return an error instead of nil
-"*RangePosition".
-
-
-[#v0_60_0__lib_goanalysis]
-=== lib/goanalysis
-
-[NEW FEATURE] +
-Package goanalysis implement go static analysis using
-[Analyzer] that are not included in the default "go vet", but included in
-the [passes] directory, including: fieldalignment, nilness,
-reflectvaluecompare, shadow, sortslice, unusedwrite, and waitgroup.
-This package is not mean to be imported directly by other package
-except main, like we have in [cmd/gocheck].
-
-
-[#v0_60_0__lib_hunspell]
-=== lib/hunspell
-
-This package has been renamed to "_hunspell".
-The hunspell is still in progress and we did not have time to continue
-it, so we rename it to "_hunspell" for now to prevent it being checked by
-linters or being imported.
-
-
-[#v0_60_0__lib_memfs]
-=== lib/memfs
-
-[BUG FIX] +
-Fix possible panic on AddChild if path is not included.
-
-
-[#v0_60_0__lib_play]
-=== lib/play
-
-[ENHANCEMENT] +
-One of the major issue that we previously have is the Run and Test
-functions can write file in any unsafe path.
-Another issue is default GoVersion and Timeout is set on the package level.
-
-This release introduce new type "Go" as the top level type that can be
-instantiate with different Root, GoVersion, and Timeout.
-The instance of Go then can Format, Run, or Test the Go code in their
-own scope.
-
-Any request to Run or Test Go code that requires writing new files now
-joined with the [GoOptions.Root] first.
-If the final absolute path does not have Root as the prefix it will return
-an error [os.ErrPermission].
-This fix possible security issue where file may be written outside of the
-Root directory.
-
-[#v0_60_0__lib_test]
-=== lib/test
-
-[ENHANCEMENT] +
-Inside the Assert, we call the [T.Helper] method.
-The Helper method mark the Assert function as test helper, which when
-printing file and line information, the stack trace from Assert function
-will be skipped.
-This remove manual lines skipping that previously we have.
-
-//}}}
-//{{{
-[#v0_59_0]
-== pakakeh.go v0.59.0 (2025-01-06)
-
-This is the first release of pakakeh.go on the year 2025.
-There are many new features and cleaning up, including packages that
-merged into single package with help of type parameters.
-
-The first major changes is indicated by using "go 1.23.4" as minimum Go
-version in this module, to allow us using new packages like "slices" and
-"maps".
-
-In this release notes, we try new format.
-Instead of grouping each changes by Breaking changes, New features, Bug
-fixes, Enhancements, and/or Chores; we group them by package.
-Each paragraph in the package sections will be prefixed with tag "[BREAKING
-CHANGE]", "[NEW FEATURE]", "[BUG FIX]", "[ENHANCEMENT]", "[CHORE]" to
-indicates the type of changes.
-
-
-[#v0_59_0__lib_binary]
-=== lib/binary
-
-The "lib/binary" is the new package that complement the standard binary
-package.
-
-[NEW FEATURE] +
-Implement append-only binary that encode the data using [binary.Writer].
-We call them "Apo" for short.
-
-[NEW FEATURE] +
-Implement buffer for reading/writing in BigEndian.
-The `BigEndianBuffer` provides backing storage for writing (most of) Go
-native types into binary in big-endian order.
-The zero value of BigEndianBuffer is an empty buffer ready to use.
-
-The following basic types are supported for Write and Read: bool, byte,
-int, float, complex, and string.
-The slice and array are also supported as long as the slice's element type
-is one of basic types.
-
-
-[#v0_59_0__lib_bytes]
-=== lib/bytes
-
-[BREAKING CHANGE] +
-In the "lib/bytes" we split the `hexdump` related functions to separate
-package, "lib/hexdump".
-
-
-[#v0_59_0__lib_floats64]
-=== lib/floats64
-
-[BREAKING CHANGE] +
-This package has been removed, merged into "slices" package.
-
-
-[#v0_59_0__lib_hexdump]
-=== lib/hexdump
-
-[NEW FEATURE] +
-Package `hexdump` implements reading and writing bytes from and into
-hexadecimal number.
-It support parsing output from
-https://man.archlinux.org/man/hexdump.1[hexdump(1)] tool.
-
-
-[#v0_59_0__lib_http]
-=== lib/http
-
-[NEW FEATURE] +
-In the [lib/http.Client] we add new method `Transport` that return default
-HTTP Transport.
-The returned [http.Transport] is created after the Client instantiated.
-Their value can be customized by user when needed, which should affect
-the Transport inside the Client.
-
-
-[#v0_59_0__lib_ints]
-=== lib/ints
-
-[BREAKING CHANGE] +
-This package has been removed, merged into "slices" package.
-
-
-[#v0_59_0__lib_ints64]
-=== lib/ints64
-
-[BREAKING CHANGE] +
-This package has been removed, merged into "slices" package.
-
-
-[#v0_59_0__lib_memfs]
-=== lib/memfs
-
-[ENHANCEMENT] +
-In the "lib/memfs" we refactoring the `Watch` method to use the new
-"watchfs/v2" package.
-
-[BREAKING CHANGE] +
-The old Watcher and DirWatcher types now moved to `watchfs` package.
-This changes require exporting method [memfs.MemFS.UpdateContent].
-
-
-[#v0_59_0__lib_numbers]
-=== lib/numbers
-
-[CHORE] +
-In the package level, we remove unused README and LICENSE files.
-This package README has been merged into the package documentation and the
-LICENSE is same with the module one.
-
-We also remove some package documentation that should be in "lib/slices".
-
-
-[#v0_59_0__lib_play]
-=== lib/play
-
-[NEW FEATURE] +
-The [lib/play] now has function and HTTP handler to run Go test code.
-Since the test must run inside the directory that contains
-the Go file to be tested, the [HTTPHandleTest] API accept the following
-request format,
-
-----
-{
- "goversion": <string>,
- "file": <string>,
- "body": <string>,
- "without_race": <boolean>
-}
-----
-
-The "file" field define the path to the "_test.go" file, default to
-"test_test.go" if its empty.
-The "body" field contains the Go code that will be saved to
-"file".
-The test will run, by default, with "go test -count=1 -race $dirname"
-where "$dirname" is the path directory to the "file" relative to where
-the program is running.
-If "without_race" is true, the test command will not run with "-race"
-option.
-
-[ENHANCEMENT] +
-On package level, the home and cache directory now initialized on package
-init since there are never changes when program running.
-If Go failed to get the home and cache it will be set to system temporary
-directory.
-
-[ENHANCEMENT] +
-We also simplify running Go code by removing the field `pid` in the struct
-`command` that wait for process ID.
-Instead we execute cmd with Run directly.
-In the Run function, we use the `UnsafeRun` to store temporary directory
-and move the statements that writes `go.mod` and `main.go` into the method
-writes of `Request`.
-This remove unnecessary `unsafeRun` function.
-
-
-[#v0_59_0__lib_reflect]
-=== lib/reflect
-
-[BREAKING CHANGE] +
-This release changes the Equal signature from "Equal(v any) bool" to
-"Equal(v any) error".
-The reason for this changes is to force the method to return an error
-message that is understand-able by caller.
-
-
-[#v0_59_0__lib_slices]
-=== lib/slices
-
-[NEW FEATURE] +
-Package "lib/ints", "lib/ints64", and "lib/floats64" are merged into
-"slices".
-Now that Go has type parameter, we can use it to use the same function
-that accept different types for working with slice of int, int64, and
-float64.
-
-
-[#v0_59_0__lib_ssh]
-=== lib/ssh
-
-[ENHANCEMENT] +
-In the lib/ssh, we implement Run with context internally.
-Instead of depends on fork of crypto with CL that needs
-https://go-review.googlesource.com/c/crypto/+/552435[proposal^],
-we implement them in here so we can update crypto module to the latest
-release.
-
-
-[#v0_59_0__lib_watchfs]
-=== lib/watchfs
-
-The `watchfs` package now contains the original, v1, of the
-`Watcher` and `DirWatcher` types from "lib/memfs".
-
-
-[#v0_59_0__lib_watchfs_v2]
-=== lib/watchfs/v2
-
-[NEW FEATURE] +
-The "lib/watchfs/v2" is the new package that implement new file and
-directory watcher, that replace the Watcher and DirWatcher in the
-"lib/memfs".
-
-The new implementation, `FileWatcher`, much more simple than what
-we have in [memfs.Watcher].
-
-The new directory watcher, DirWatcher, scan the content of directory in
-[fs.DirWatcherOptions.Root] recursively for the files to be watched, using
-the [fs.DirWatcherOptions.Includes] field.
-A single file, [fs.DirWatcherOptions.FileWatcherOptions.FilePath], will
-be watched for changes that trigger re-scanning the content of Root
-recursively.
-
-The result of re-scanning is list of the Includes files (only files not
-new directory) that are changes, which send to channel C.
-On each [os.FileInfo] received from C, a deleted file have
-[os.FileInfo.Size] equal to [NodeFlagDeleted].
-The channel send an empty slice if no changes.
-
-The implementation of file changes in this code is naive, using loop and
-comparison of mode, modification time, and size; at least it should
-works on most operating system.
-
-//}}}
diff --git a/README.md b/README.md
index 2116605d..9556797d 100644
--- a/README.md
+++ b/README.md
@@ -347,7 +347,7 @@ Package xmlrpc provide an implementation of
- [RFC 7208: Sender Policy Framework version 1](RFC_7808__SPFv1.html).
-## DNS
+### DNS
- [RFC 6891: Extension Mechanisms for DNS (EDNS(0)](RFC_6891_EDNS0.html).
@@ -360,6 +360,9 @@ This library is released every month, usually at the first week of month.
[Latest changelog](CHANGELOG.html).
+[Changelog in 2025](CHANGELOG_2025.html).
+Changelog for `pakakeh.go` module since v0.59.0 until v0.60.2.
+
[Changelog in 2024](CHANGELOG_2024.html).
Changelog for `pakakeh.go` module since v0.52.0 until v0.58.1.
diff --git a/_doc/CHANGELOG_2018-2019.adoc b/_doc/CHANGELOG_2018-2019.adoc
index dcd8eba9..35db1656 100644
--- a/_doc/CHANGELOG_2018-2019.adoc
+++ b/_doc/CHANGELOG_2018-2019.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
-= Changelog from 2018 to 2019
+= pakakeh.go Changelog from 2018 to 2019
Shulhan <ms@kilabit.info>
3 July 2022
:toc:
diff --git a/_doc/CHANGELOG_2020.adoc b/_doc/CHANGELOG_2020.adoc
index f8477f2e..13268ef5 100644
--- a/_doc/CHANGELOG_2020.adoc
+++ b/_doc/CHANGELOG_2020.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
-= Changelog 2020
+= pakakeh.go Changelog 2020
Shulhan <ms@kilabit.info>
3 July 2022
:toc:
diff --git a/_doc/CHANGELOG_2021.adoc b/_doc/CHANGELOG_2021.adoc
index 86583d8d..d79bffeb 100644
--- a/_doc/CHANGELOG_2021.adoc
+++ b/_doc/CHANGELOG_2021.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2022 M. Shulhan <ms@kilabit.info>
-= Changelog 2021
+= pakakeh.go Changelog 2021
Shulhan <ms@kilabit.info>
3 July 2022
:toc:
diff --git a/_doc/CHANGELOG_2022.adoc b/_doc/CHANGELOG_2022.adoc
index 69c9ab47..94c57434 100644
--- a/_doc/CHANGELOG_2022.adoc
+++ b/_doc/CHANGELOG_2022.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
-= Changelog 2022
+= pakakeh.go Changelog 2022
Shulhan <ms@kilabit.info>
:toc:
:sectanchors:
diff --git a/_doc/CHANGELOG_2023.adoc b/_doc/CHANGELOG_2023.adoc
index 85a0d7eb..02fc3b73 100644
--- a/_doc/CHANGELOG_2023.adoc
+++ b/_doc/CHANGELOG_2023.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
-= CHANGELOG
+= pakakeh.go Changelog 2023
Shulhan <ms@kilabit.info>
:toc:
:sectanchors:
diff --git a/_doc/CHANGELOG_2024.adoc b/_doc/CHANGELOG_2024.adoc
index 563b62b0..93fa1a53 100644
--- a/_doc/CHANGELOG_2024.adoc
+++ b/_doc/CHANGELOG_2024.adoc
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018 M. Shulhan <ms@kilabit.info>
-= pakakeh.go CHANGELOG
+= pakakeh.go Changelog 2024
:toc:
:sectanchors:
diff --git a/_doc/CHANGELOG_2025.adoc b/_doc/CHANGELOG_2025.adoc
new file mode 100644
index 00000000..6c145575
--- /dev/null
+++ b/_doc/CHANGELOG_2025.adoc
@@ -0,0 +1,426 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
+
+= pakakeh.go Changelog 2025
+:std_url: https://pkg.go.dev
+:sectanchors:
+:toc:
+
+link:CHANGELOG_2024.html[Changelog in 2024].
+Changelog for `pakakeh.go` module since v0.52.0 until v0.58.1.
+
+link:CHANGELOG_2023.html[Changelog in 2023^].
+This is changelog for `pakakeh.go` module since v0.43.0 until v0.51.0.
+
+link:CHANGELOG_2022.html[Changelog in 2022^].
+This is changelog for `pakakeh.go` module since v0.33.0 until v0.42.0.
+
+link:CHANGELOG_2021.html[Changelog in 2021^].
+This is changelog for `pakakeh.go` module since v0.22.0 until v0.32.0.
+
+link:CHANGELOG_2020.html[Changelog in 2020^].
+This is changelog for `pakakeh.go` module since v0.12.0 until v0.21.0.
+
+link:CHANGELOG_2018-2019.html[Changelog from 2018 to 2019^].
+This is changelog for `pakakeh.go` module since v0.1.0 until v0.11.0.
+
+[#v0_60_2]
+== pakakeh.go v0.60.2 (2025-12-27)
+//{{{
+
+This is periodic and last release of pakakeh.go for year 2025.
+There is no changes on code level only on documentation.
+
+In the _doc, we merge the index.adoc into README.md so we can served the
+_doc directory under https://kilabit.info/project/pakakeh.go .
+We also fix some broken links in documentation files.
+
+In lib/time, add missing "Hourly" section in the package documentation.
+
+The go.mod is updated to use Go 1.24.0 as minimum version; and all
+dependencies has been updated to latest release.
+
+//}}}
+[#v0_60_1]
+== pakakeh.go v0.60.1 (2025-04-18)
+//{{{
+
+[#v0_60_1__lib_bytes]
+=== lib/bytes
+
+[NEW FEATURE] +
+New method Peek in Parser.
+The Peek method take a look on n bytes inside the buffer without
+using delimiters.
+The returned bytes may empty or have length less than n.
+
+//}}}
+[#v0_60_0]
+== pakakeh.go v0.60.0 (2025-02-01)
+//{{{
+
+Some changes that affected almost all packages are by replacing
+"interface{}" with "any" (added since Go 1.18),
+using for-range on numeric value (supported on Go 1.22).
+
+
+[#v0_60_0__lib_bytes]
+=== lib/bytes
+
+[BREAKING CHANGES] +
+We remove Copy and Concat functions in favor of standard library.
+Since Go 1.20, the standard bytes package have the Copy function.
+Since Go 1.22, the standard slices package have the Concat function.
+
+[BREAKING CHANGES] +
+We also remove "lib/bytes.AppendXxx", "lib/bytes.ReadXxx", and
+"lib/bytes.WriteXxx" in favor of standard library.
+Since Go 1.19, package "encoding/binary" support appending byte order.
+The ReadXxx and WriteXxx can be replaced with standard library
+BigEndian/LittleEndian UintXxx and PutUintXxx.
+
+
+[#v0_60_0__lib_debug]
+=== lib/debug
+
+[BREAKING CHANGES] +
+The global Value variable has been removed.
+Using global variable inside one package is a mistake.
+If, for example, package X set debug.Value to 1, another packages that
+does need to be debugged will print unnecessary log messages.
+
+
+[#v0_60_0__lib_dns]
+=== lib/dns
+
+[BUG FIX] +
+We fix unpacking HTTPS where the response answers contains RR other than
+SVCB parameters, for example CNAME.
+
+[ENHANCEMENT] +
+This release now detect invalid response header earlier, like invalid op
+code and response code, before we continue unpacking the rest data.
+Previously, we unpack the header and then question without
+detecting whether the header itself is valid or not.
+This cause the unpacking question return an error like
+
+ label length overflow at index xxx
+
+One of the case is when someone sent random or HTTP request
+to DoT port.
+
+[ENHANCEMENT] +
+In the logging part, we improve the logging prefix on serveTCPClient.
+The serveTCPClient is used to serve TCP and DoT clients.
+Previously, the error returned from this method is prefixed based on the
+kind, for example
+
+ serveTCPClient TCP: ...
+ serveTCPClient DoT: ...
+
+This changes pass the log prefix to the method so now it become
+
+ serveTCPClient: ...
+ serveDoTClient: ...
+
+
+[#v0_60_0__lib_http]
+=== lib/http
+
+[ENHANCEMENT] +
+On server with TryDirect is true, a GET request to a directory now always
+rescan the content and the generate the new "index.html".
+
+In the generated "index.html" we display the file time in UTC instead of
+local time.
+
+The ParseContentRange function now return an error instead of nil
+"*RangePosition".
+
+
+[#v0_60_0__lib_goanalysis]
+=== lib/goanalysis
+
+[NEW FEATURE] +
+Package goanalysis implement go static analysis using
+[Analyzer] that are not included in the default "go vet", but included in
+the [passes] directory, including: fieldalignment, nilness,
+reflectvaluecompare, shadow, sortslice, unusedwrite, and waitgroup.
+This package is not mean to be imported directly by other package
+except main, like we have in [cmd/gocheck].
+
+
+[#v0_60_0__lib_hunspell]
+=== lib/hunspell
+
+This package has been renamed to "_hunspell".
+The hunspell is still in progress and we did not have time to continue
+it, so we rename it to "_hunspell" for now to prevent it being checked by
+linters or being imported.
+
+
+[#v0_60_0__lib_memfs]
+=== lib/memfs
+
+[BUG FIX] +
+Fix possible panic on AddChild if path is not included.
+
+
+[#v0_60_0__lib_play]
+=== lib/play
+
+[ENHANCEMENT] +
+One of the major issue that we previously have is the Run and Test
+functions can write file in any unsafe path.
+Another issue is default GoVersion and Timeout is set on the package level.
+
+This release introduce new type "Go" as the top level type that can be
+instantiate with different Root, GoVersion, and Timeout.
+The instance of Go then can Format, Run, or Test the Go code in their
+own scope.
+
+Any request to Run or Test Go code that requires writing new files now
+joined with the [GoOptions.Root] first.
+If the final absolute path does not have Root as the prefix it will return
+an error [os.ErrPermission].
+This fix possible security issue where file may be written outside of the
+Root directory.
+
+[#v0_60_0__lib_test]
+=== lib/test
+
+[ENHANCEMENT] +
+Inside the Assert, we call the [T.Helper] method.
+The Helper method mark the Assert function as test helper, which when
+printing file and line information, the stack trace from Assert function
+will be skipped.
+This remove manual lines skipping that previously we have.
+
+//}}}
+[#v0_59_0]
+== pakakeh.go v0.59.0 (2025-01-06)
+//{{{
+
+This is the first release of pakakeh.go on the year 2025.
+There are many new features and cleaning up, including packages that
+merged into single package with help of type parameters.
+
+The first major changes is indicated by using "go 1.23.4" as minimum Go
+version in this module, to allow us using new packages like "slices" and
+"maps".
+
+In this release notes, we try new format.
+Instead of grouping each changes by Breaking changes, New features, Bug
+fixes, Enhancements, and/or Chores; we group them by package.
+Each paragraph in the package sections will be prefixed with tag "[BREAKING
+CHANGE]", "[NEW FEATURE]", "[BUG FIX]", "[ENHANCEMENT]", "[CHORE]" to
+indicates the type of changes.
+
+
+[#v0_59_0__lib_binary]
+=== lib/binary
+
+The "lib/binary" is the new package that complement the standard binary
+package.
+
+[NEW FEATURE] +
+Implement append-only binary that encode the data using [binary.Writer].
+We call them "Apo" for short.
+
+[NEW FEATURE] +
+Implement buffer for reading/writing in BigEndian.
+The `BigEndianBuffer` provides backing storage for writing (most of) Go
+native types into binary in big-endian order.
+The zero value of BigEndianBuffer is an empty buffer ready to use.
+
+The following basic types are supported for Write and Read: bool, byte,
+int, float, complex, and string.
+The slice and array are also supported as long as the slice's element type
+is one of basic types.
+
+
+[#v0_59_0__lib_bytes]
+=== lib/bytes
+
+[BREAKING CHANGE] +
+In the "lib/bytes" we split the `hexdump` related functions to separate
+package, "lib/hexdump".
+
+
+[#v0_59_0__lib_floats64]
+=== lib/floats64
+
+[BREAKING CHANGE] +
+This package has been removed, merged into "slices" package.
+
+
+[#v0_59_0__lib_hexdump]
+=== lib/hexdump
+
+[NEW FEATURE] +
+Package `hexdump` implements reading and writing bytes from and into
+hexadecimal number.
+It support parsing output from
+https://man.archlinux.org/man/hexdump.1[hexdump(1)] tool.
+
+
+[#v0_59_0__lib_http]
+=== lib/http
+
+[NEW FEATURE] +
+In the [lib/http.Client] we add new method `Transport` that return default
+HTTP Transport.
+The returned [http.Transport] is created after the Client instantiated.
+Their value can be customized by user when needed, which should affect
+the Transport inside the Client.
+
+
+[#v0_59_0__lib_ints]
+=== lib/ints
+
+[BREAKING CHANGE] +
+This package has been removed, merged into "slices" package.
+
+
+[#v0_59_0__lib_ints64]
+=== lib/ints64
+
+[BREAKING CHANGE] +
+This package has been removed, merged into "slices" package.
+
+
+[#v0_59_0__lib_memfs]
+=== lib/memfs
+
+[ENHANCEMENT] +
+In the "lib/memfs" we refactoring the `Watch` method to use the new
+"watchfs/v2" package.
+
+[BREAKING CHANGE] +
+The old Watcher and DirWatcher types now moved to `watchfs` package.
+This changes require exporting method [memfs.MemFS.UpdateContent].
+
+
+[#v0_59_0__lib_numbers]
+=== lib/numbers
+
+[CHORE] +
+In the package level, we remove unused README and LICENSE files.
+This package README has been merged into the package documentation and the
+LICENSE is same with the module one.
+
+We also remove some package documentation that should be in "lib/slices".
+
+
+[#v0_59_0__lib_play]
+=== lib/play
+
+[NEW FEATURE] +
+The [lib/play] now has function and HTTP handler to run Go test code.
+Since the test must run inside the directory that contains
+the Go file to be tested, the [HTTPHandleTest] API accept the following
+request format,
+
+----
+{
+ "goversion": <string>,
+ "file": <string>,
+ "body": <string>,
+ "without_race": <boolean>
+}
+----
+
+The "file" field define the path to the "_test.go" file, default to
+"test_test.go" if its empty.
+The "body" field contains the Go code that will be saved to
+"file".
+The test will run, by default, with "go test -count=1 -race $dirname"
+where "$dirname" is the path directory to the "file" relative to where
+the program is running.
+If "without_race" is true, the test command will not run with "-race"
+option.
+
+[ENHANCEMENT] +
+On package level, the home and cache directory now initialized on package
+init since there are never changes when program running.
+If Go failed to get the home and cache it will be set to system temporary
+directory.
+
+[ENHANCEMENT] +
+We also simplify running Go code by removing the field `pid` in the struct
+`command` that wait for process ID.
+Instead we execute cmd with Run directly.
+In the Run function, we use the `UnsafeRun` to store temporary directory
+and move the statements that writes `go.mod` and `main.go` into the method
+writes of `Request`.
+This remove unnecessary `unsafeRun` function.
+
+
+[#v0_59_0__lib_reflect]
+=== lib/reflect
+
+[BREAKING CHANGE] +
+This release changes the Equal signature from "Equal(v any) bool" to
+"Equal(v any) error".
+The reason for this changes is to force the method to return an error
+message that is understand-able by caller.
+
+
+[#v0_59_0__lib_slices]
+=== lib/slices
+
+[NEW FEATURE] +
+Package "lib/ints", "lib/ints64", and "lib/floats64" are merged into
+"slices".
+Now that Go has type parameter, we can use it to use the same function
+that accept different types for working with slice of int, int64, and
+float64.
+
+
+[#v0_59_0__lib_ssh]
+=== lib/ssh
+
+[ENHANCEMENT] +
+In the lib/ssh, we implement Run with context internally.
+Instead of depends on fork of crypto with CL that needs
+https://go-review.googlesource.com/c/crypto/+/552435[proposal^],
+we implement them in here so we can update crypto module to the latest
+release.
+
+
+[#v0_59_0__lib_watchfs]
+=== lib/watchfs
+
+The `watchfs` package now contains the original, v1, of the
+`Watcher` and `DirWatcher` types from "lib/memfs".
+
+
+[#v0_59_0__lib_watchfs_v2]
+=== lib/watchfs/v2
+
+[NEW FEATURE] +
+The "lib/watchfs/v2" is the new package that implement new file and
+directory watcher, that replace the Watcher and DirWatcher in the
+"lib/memfs".
+
+The new implementation, `FileWatcher`, much more simple than what
+we have in [memfs.Watcher].
+
+The new directory watcher, DirWatcher, scan the content of directory in
+[fs.DirWatcherOptions.Root] recursively for the files to be watched, using
+the [fs.DirWatcherOptions.Includes] field.
+A single file, [fs.DirWatcherOptions.FileWatcherOptions.FilePath], will
+be watched for changes that trigger re-scanning the content of Root
+recursively.
+
+The result of re-scanning is list of the Includes files (only files not
+new directory) that are changes, which send to channel C.
+On each [os.FileInfo] received from C, a deleted file have
+[os.FileInfo.Size] equal to [NodeFlagDeleted].
+The channel send an empty slice if no changes.
+
+The implementation of file changes in this code is naive, using loop and
+comparison of mode, modification time, and size; at least it should
+works on most operating system.
+
+//}}}