Retarget shaker to Tarver's refreshed S41.2 kernel (lineage switch)#10
Merged
Conversation
Lineage switch from community ShenOSKernel-41.2 to the S-series refresh (canonical mirror pyrex41/shen-s41.1, tag s41.2-pristine-20260711). The refreshed kernel has no shen.initialise: initialisation is toplevel forms in declarations.kl (34 sets + arity table + external-symbols put + build-lambda-table) and types.kl (161 declares). The shake now collects those forms, seeds reachability from them, and synthesises a (defun shen.initialise () ...) so the stage-2 builder contract is unchanged. Eval-free programs blank the *macros* registration, drop the declares, and replace the eval-kl-at-boot build-lambda-table call with a literal (set shen.*lambdatable* ...) of deterministic eta-wrappers restricted to the footprint. Green: stage-1 shake on shen-cl host; lua target end-to-end on fib/hello/prolog/parity fixtures (fib: 54 defuns / 13.4 KB, needs-eval=false, cannot-reach=eval); go build + 7 tests. Red (port-side couplings, for the per-port migrations): shen-lua eval-kl define-path calls community hook shen.set-lambda-form-entry (metaeval); ShenScript native put/get are dict-typed and reject the property vector (all slices). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pyrex41
marked this pull request as ready for review
July 14, 2026 11:38
called-fns consults kernel-defun? (the defp property) while collecting seeds from the kernel's toplevel init forms, but only build-call-graph set the marks - a cache-hit shake seeded nothing from the init forms and silently under-shook (metaeval emitted 306 defuns instead of 548; lua's native fallbacks masked it, the rust boot caught it: 'undefined function: vector'). load-call-graph now marks each row head. Cache-hit and cache-miss shakes are verified byte-identical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
What
Switches the vendored kernel from community ShenOSKernel-41.2 to Mark Tarver's refreshed S41.2 (shenlanguage.org, re-uploaded in place 2026-07-11; canonical mirror
pyrex41/shen-s41.1tags41.2-pristine-20260711, commit11fc51b) and adapts stage 1 to its new architecture.Upstream delta (vs community 41.2)
backend.klnew (thecl.*KL→Lisp compiler, in-kernel);compiler.kl/dict.kl/init.kl/stlib.kl/extension-*.klgone*property-vector*, plain absvector)shen.initialise— init is toplevel forms (declarations.kl sets/arity/externals/lambda-table + types.kl 161 declares); boot order isinstall.lsp's (types last), which is the authoritative linear .kl load orderput get arity bootstrap read macroexpand), 21 new, ~26 core removalsShaker adaptation
(defun shen.initialise () ...)— emittedkernel.klcontains defuns only (verified 0 raw toplevel forms), so builderoverrides → init → userordering is safe, and the manifestinit=shen.initialisecontract is unchanged*macros*, drops the declares, and replaces the eval-kl-at-boot(shen.build-lambda-table (external shen))with a literal(set shen.*lambdatable* ...)of deterministic eta-wrappers (X1..Xn) restricted to footprint ∩ arity-table — slices stayneeds-eval=false/cannot-reach=evaldeclaretreated as data (declared name is a table key, not a call)8ae561a):load-call-graphnow restores thedefpmarks — a cache-hit shake previously seeded nothing from the init forms and silently under-shook (metaeval 306 instead of 548 defuns; lua's native fallbacks masked it, the rust boot in the parity gate caught it). Cache-hit and cache-miss shakes verified byte-identical.kernel-version=41.2-s41r.20260711(builders warn, don't fail); callgraph cache renamed; provenance rewritten citing the mirrorStatus — all four wired targets green
--linked); regeneratedtest/ratatoskrfixtures handed off--target lua,rust,go,js --expectSlice sizes: fib 54 defuns / 13.4 KB (was ~100 / 66 KB on community 41.2), hello 54, prolog 67, metaeval 548 (was ~568).
Merge dependencies: the per-port
kernel/tarver-s41-refresh-20260711branches (shen-lua#36, shen-rust#9, shen-go#18, ShenScript). Cross-lineage caveat: stage-1 host is still a community-41.2 shen-cl; a host built on the refreshed kernel is the right long-term stage-1 reference.🤖 Generated with Claude Code