Move the portable example's pins, and record what the plan got wrong - #15
Merged
Conversation
The specification does not change. Two implementations do: openkal-macos provides the five interfaces 0.8 added and openkal-windows provides four of them, so the example that demonstrates one program above three implementations names the versions that have them. .agents/docs gains section 9 of the capability-completeness plan --- what was implemented, the four decisions section 8 left open, and the five things the plan itself got wrong. Two of the five are worth naming here:⚠️ `posix_spawn' was never missing. openkal-musl replaced musl's source when the port was written, and `system' and `popen' have worked through it ever since. What was missing was a criterion.⚠️ ⚠️ `timeout_ns = 0' does not mean "do not wait" --- it means NO BOUND, which timeout.h states and kal_task_wait established. The plan had it backwards, and passing a caller's zero straight through turns the one call that must not wait into the one that never returns. And one thing nothing had noticed: no continuous integration anywhere selected these interfaces. Every backend ran the conformance suite as `full', which expands to the HOSTED set, so every section for net, datagram, timeout, exec and space was compiled with its body removed and reported as not examined --- in the same release that added them.
Every workflow in this ecosystem substitutes its siblings' working trees for the versions its manifests name. That is deliberate --- these repositories change together --- and the consequence is that NO WORKFLOW ANYWHERE RESOLVES A PUBLISHED PACKAGE. `openkal-kit' 0.1.0 shipped naming the specification by a path, which is true inside its own tarball and false for any consumer that also names an implementation; eight packages published, nine workflows green and eight repositories green on their own main, and the first resolution of the published set failed. The script that asks that question existed only in a scratch directory. It is here now, generalised over the versions and extended to exercise the routes this release adds --- a listener, a connection, a transfer and a duplicated image, written through POSIX and naming no openkal symbol, so that a published C library whose sockets do not work cannot satisfy it.
⚠️ THE FIRST RUN IN WHICH THIS SECTION WAS SELECTED AT ALL is the run that found it. openkal-windows now names `exec' in its feature set, and the MSVC row stopped at exec.cpp(78): error C3861: '__builtin___clear_cache': identifier not found exec.cpp(82): error C3861: '__builtin_memcpy': identifier not found The suite is built by three compilers and had been written against two. The cache maintenance is guarded on the COMPILER rather than on the architecture, because what varies is which compiler spells the operation that way; where it is absent, the architectures that compiler targets here keep the two paths coherent in hardware. The copy becomes a byte loop: this suite reaches no C library --- it is written to run against an implementation that may be the only supplier of one --- and a builtin is not a C library, but it is not a language feature either.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The specification does not change. No interface was added, none was altered, and
SURFACE.txtis untouched.Two implementations do change:
openkal-macosprovides the five interfaces 0.8added and
openkal-windowsprovides four of them, soexamples/portable— theexample that demonstrates one program above three implementations — names the
versions that have them.
§9 of the capability-completeness plan
.agents/docs/2026-08-27-capability-completeness-across-the-ecosystem.mdgainsa section recording what was implemented, the four decisions §8 left open, and
five things the plan itself got wrong. Two are worth naming here:
posix_spawnwas never missing.openkal-muslreplaced musl's sourcewhen the port was written, and
systemandpopenhave worked through it eversince. What was missing was a criterion.
timeout_ns = 0does not mean "do not wait" — it means no bound,which
timeout.hstates andkal_task_waitestablished. The plan had itbackwards, and passing a caller's zero straight through turns the one call that
must not wait into the one that never returns.
And one thing nothing had noticed: no continuous integration anywhere selected
these interfaces. Every backend ran the conformance suite as
full, whichexpands to the hosted set, so every section for
net,datagram,timeout,execandspacewas compiled with its body removed and reported as notexamined — in the same release that added them.
The four decisions, settled:
fork()— trampoline or refusalspace.hasked for it in termsopenkal.spaceon WindowsThis is one change across seven repositories, and every branch carries the
same name. Each repository's continuous integration substitutes its siblings'
working trees taken from the branch of the name under test, so the graph only
holds together when they agree.
openkal-muslopenkal-macosopenkal-windowsopenkal.spacedeclined in termsopenkal-linuxopenkal-llvm-runtime__config_site's claims asserted by a program, and the C library repinnedopenkalsbaseThe specification does not change. No interface was added, none was altered,
and
SURFACE.txtis untouched — every capability below is composed from atomsopenkal 0.8 already had.