From 2954d08f84c344fe154198ea80ef832d6d022f66 Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Fri, 7 Aug 2026 04:25:29 +1000 Subject: [PATCH] G-172 achieved: flip to achieved + archive (distributed-binary CPU floor) Rebuild + in-situ republish (Approach 6) completed the acceptance. Full `zig build bootstrap` (pinned 0.16.0) rebuilt the r2 family WITH the G-172 cpu_floor field now in the embedded [provenance] record (re-stage picked up the build905.zig floor-field edit; zig-cached C compiles, only the wrap + emit re-ran). family_check passed for all three members (the new embed_cpu_floor/embed_cpu_model assertions green). Audit of the rebuilt r2 exes: all three PASS at the baseline floor (zmm=0 ymm=0 out-of-floor=0). Published in-situ to punkbin (git 59e7475, pushed origin/master): the three r2 exes + three r2 tomls replaced under existing names/revisions; each toml [provenance] now carries cpu_floor="baseline" + cpu_model="x86_64"; the [tests] tclcore line refreshed to the shipped-codegen gate evidence (passed=56041 failed=8, the Aug-06 baseline-rebuild test-gate - was 56039/9); library [tests] lines unchanged; sha1sums.txt: the 6 r2 lines updated. build_id unchanged per artifact (the floor field does not enter the identity digest); sha1/size/built updated. Every acceptance conjunct verified on this Zen 5 / v4 host: audit zmm=0 on the republished artifacts; -Dcpu=native still host-tuned (probe: native zmm=123 FAIL at baseline, PASS at v4 - the floor is a default, not a restriction); the republished tomls state the floor; punk-runtime surfaces it (info/list/use/fetch); use/run produce a named 0xC000001D diagnosis on a below-floor recorded cpu_model (verified by mocked-host tests - not end-to-end demonstrable here: every published artifact is baseline/v1 which every host meets, and no x86-64 level exceeds v4); fetch stays ungated. DOX closeout: detail file -> goals/archive/ (pure rename; Status achieved 2026-08-07; verification evidence + ## Follow-ons recorded). Index entry -> GOALS-archive.md (removed from GOALS.md). Reference sweep: only the GOALS.md index entry mentioned G-172 in the live tier (no pending-tense rewrites); design- decision Notes pointers added to G-105 (inherits the settled default_target cpu_model shape) and G-130 (consumes the baseline floor decision on its i686 axis). goals_lint clean (80 active, 93 archived); goals_followons parses the 2 open Follow-ons (r1-generation disposition; bin/ punk9* kit rebake). Assisted-by: harness=pi; primary-model=huggingface/zai-org/GLM-5.2; api-location=huggingface.co --- GOALS-archive.md | 4 ++ GOALS.md | 4 -- goals/G-105-buildsuite-cross-target.md | 3 + goals/G-130-32bit-windows-buildsuites.md | 4 ++ .../G-172-distributed-binary-cpu-floor.md | 59 ++++++++++++++++++- 5 files changed, 69 insertions(+), 5 deletions(-) rename goals/{ => archive}/G-172-distributed-binary-cpu-floor.md (81%) diff --git a/GOALS-archive.md b/GOALS-archive.md index 5d0b40c7..5c0d5fcb 100644 --- a/GOALS-archive.md +++ b/GOALS-archive.md @@ -24,6 +24,10 @@ Do not edit archived records here except to fix a broken path. Archived detail f Scope: src/modules/punk-999999.0a1.0.tm (punk::path proc - add -return modes + -context); src/tests/modules/punk/path/testsuites/tests/ (return-shape + round-trip + ansi-freeness tests) Acceptance: -return gains text, dict and json choices whose output contains no ansi escapes regardless of -highlight; the returned structure is documented in the command's punk::args definition; the default table output is byte-unchanged for existing users (existing path.test cases stay green); -return json round-trips the same data as -return dict (decode via tcllib json, recompare); the conflict verdict is stable independent of how the consumer invoked the proc via a -context option (default the caller's namespace); new tests pin dict/json shape, ansi-freeness, and dict/json round-trip parity; a duplicate-path entry and an overshadowed executable each appear in the dict/json with the fields a machine consumer needs (idx, is_duplicate, duplicate_of, overshadowed, overshadowed_by, tcl_conflicts with match=exact|nocase). +### G-172 [achieved 2026-08-07] Distributed binaries declare a CPU floor - no shipped artifact is tuned to its build host → detail: goals/archive/G-172-distributed-binary-cpu-floor.md +Scope: src/buildsuites/suite_tcl90/build905.zig and src/buildsuites/suite_tcl86/build86.zig (flagless target/cpu resolution defaults); src/tools/punkzip/build.zig and src/tools/punkres/build.zig (distributed build-path tools); src/buildsuites/suite_tcl90/tools/family_artifacts.tcl (artifact record emission - the recorded floor field); punkbin artifact repo (external c:/repo/jn/punkbin - win32-x86_64/*.toml sidecars, defaults.txt curation); bin/ (the shipped zig-built exes); src/scriptapps/bin/punk-runtime.* (floor reporting on fetch, floor-vs-host verdict on use/run); scriptlib/developer/ (cpu-floor audit tool) +Acceptance: A flagless build of each distributed-artifact recipe (suite_tcl90, suite_tcl86, punkzip, punkres) on an AVX-512-capable host emits zero instructions above the declared floor - verified by an audit tool that disassembles the produced binaries and reports out-of-floor instructions, carrying the current AVX-512 regression as its fixture; `-Dcpu=native` still yields a host-tuned local build, proving the floor is a default and not a restriction; each published artifact's metadata record states the floor it was built to and punk-runtime surfaces it; and selecting or launching a runtime whose recorded floor the local CPU does not meet produces a named diagnosis instead of a silent 0xC000001D, while fetching for any platform stays ungated. + ### G-166 [achieved 2026-08-06] cmdinfo/cmdhelp surface recognised-but-unavailable landings distinctly → detail: goals/archive/G-166-cmdinfo-unavailable-surfacing.md Scope: src/modules/punk/ns-999999.0a1.0.tm (cmdinfo result key, cmd_traverse landing attribution, cmdhelp render marking + advisory-parse presentation); src/modules/punk/args/moduledoc/tclcore-999999.0a1.0.tm (virtual ids lead with the unavailability note on affected runtimes); src/tests/modules/punk/ns/testsuites/ns/ (cmdinfo/cmdhelp pins incl the deliberate key-list flip); src/tests/modules/punk/args/testsuites/args/tclcoreparity.test (8.6-arm pins) Acceptance: on a runtime where the tclcore model declares dict unavailable (Tcl 8.6), cmdinfo for 'string is dict' (direct and decomposed invocation forms) reports the new availability key carrying 'dict' while 'string is true' reports it empty, with cmdtype remaining 'doconly' for both (the command-kind axis is not overloaded); the key is present on every cmdinfo result and the cmdhelp.test cmdinfo key-list pin is flipped deliberately; cmdhelp output for an unavailable subject is visibly distinguished in table, text and dict return forms (the dict form carries the key; table/text carry a marking naming the unavailability), and an argument tail such as 'string is dict 5' no longer renders as a cleanly usable command line; the walk's unique-prefix landing on an unavailable name ('i string is dic' on 8.6) has a decided, pinned behaviour consistent with the marking (either resolving the virtual docid WITH the marking, or documented-conservative non-resolution); tclcore virtual ids for unavailable classes lead their rendered help with the unavailability statement on affected runtimes (first description line, not buried mid-prose) while modern runtimes render those ids unchanged; definitions without -choiceunavailable and existing cmdinfo/cmdhelp consumers behave unchanged (full punk/ns and punk/args suites green apart from deliberately flipped pins); the enacted G-073 Follow-on lines carry => goal G-166 dispositions. (Achieved: punk::ns 0.10.0 - cmdinfo 'unavailable' key on every result as a SECOND axis beside cmdtype (both 'string is dict' and 'string is true' stay doconly on 8.6), cmd_traverse records carrying a sixth attribution element; prefix-landing DECIDED as resolve-the-virtual-docid-marked rather than conservative non-resolution, since addressing and availability are separate axes and non-resolution made addressing inconsistent ('i string is tr' resolved, 'i string is dic' did not) - the choice traverse's G-040 parse-parity claim untouched, an unavailable word still identifies no subcommand there; cmdhelp marking via one shared wording in every return form, taking precedence over both the ok-parse info render and any parse failure message so 'i string is dict 5' no longer renders info-scheme-clean; tclcore moduledoc 0.4.1 leads an unavailable class's virtual-id help with the unavailability statement, modern runtimes unchanged; cmdflow.test 25/25 + cmdhelp.test 50/50 on 8.6.10 (affected arm), 8.7a6 and 9.0.5, full punk/args subtree 341/338/3 skips/0 fail on all three, full punk/ns 125 green on 9.0.5 and green on 8.6/8.7 apart from two verified-pre-existing nsprimitives failures, plus a 1257-test src/tests/modules/*** sweep on 9.0.5 with 0 failures; punkshell 0.57.0.) diff --git a/GOALS.md b/GOALS.md index 8751c70f..9b617376 100644 --- a/GOALS.md +++ b/GOALS.md @@ -406,7 +406,3 @@ Detail: goals/G-167-punkargs-version-delta-availability.md Scope: src/make.tcl (bake/bakehouse/vfslibs - VFSPAYLOAD + PACKAGES phases, kit assembly, new explicit materialize/tidy commands); src/make.tcl sync_layouts phase (the mint-side tracked-path write) with its targets src/project_layouts/ and src/modules/punk/mix/#modpod-templates-999999.0a1.0/templates/project_layouts/ plus the workflow_text TERMINOLOGY/DIAGRAM 1b stage-verb assignment; src/vfs/ (payload declarations, _targets staging generalization, README.md + AGENTS.md precedence spec); src/_bake (assembly staging); bin/packages (lib-tier consumption); .gitignore + .fossil-settings/ignore-glob (staging ignore coverage); src/tests/shell/testsuites/punkexe/ (kill-probe + precedence characterization) Detail: goals/G-171-bake-writes-land-untracked.md -### G-172 [active] Distributed binaries declare a CPU floor - no shipped artifact is tuned to its build host -Scope: src/buildsuites/suite_tcl90/build905.zig and src/buildsuites/suite_tcl86/build86.zig (flagless target/cpu resolution defaults); src/tools/punkzip/build.zig and src/tools/punkres/build.zig (distributed build-path tools); src/buildsuites/suite_tcl90/tools/family_artifacts.tcl (artifact record emission - the recorded floor field); punkbin artifact repo (external c:/repo/jn/punkbin - win32-x86_64/*.toml sidecars, defaults.txt curation); bin/ (the shipped zig-built exes); src/scriptapps/bin/punk-runtime.* (floor reporting on fetch, floor-vs-host verdict on use/run); scriptlib/developer/ (cpu-floor audit tool) -Detail: goals/G-172-distributed-binary-cpu-floor.md - diff --git a/goals/G-105-buildsuite-cross-target.md b/goals/G-105-buildsuite-cross-target.md index 9a08dbce..3fffd83f 100644 --- a/goals/G-105-buildsuite-cross-target.md +++ b/goals/G-105-buildsuite-cross-target.md @@ -165,3 +165,6 @@ goals/archive/G-100-suite-tcl86-tk-tcllib.md), G-102 (achieved 2026-07-21 - driv bin/kits// (src/_bake tiered the same way), with per-target payload selection via %platform% declarations - the consumption end of this goal's produce end - see goals/archive/G-127-crosstarget-vfs-bake.md. +- G-172 (achieved 2026-08-07, archived) settled the recipe default_target cpu_model + shape (.baseline) that this goal's cross-target axis inherits - the CPU axis of the + same recipe's target parameterization - see goals/archive/G-172-distributed-binary-cpu-floor.md. diff --git a/goals/G-130-32bit-windows-buildsuites.md b/goals/G-130-32bit-windows-buildsuites.md index d7537273..2e96e887 100644 --- a/goals/G-130-32bit-windows-buildsuites.md +++ b/goals/G-130-32bit-windows-buildsuites.md @@ -164,3 +164,7 @@ the other's generation. the 8.6 kit-side consumer of this goal's runtimes; G-101 (achieved 2026-08-02) decided mk4 and demonstrated the x64 kit-head - the ix86 head is its recorded follow-on parity item 4. +- G-172 (achieved 2026-08-07, archived) recorded the x86_64 family's baseline + CPU-floor decision (recipe default_target cpu_model=.baseline) - the same + class of choice this goal's win32-ix86 lane makes on its i686 axis - see + goals/archive/G-172-distributed-binary-cpu-floor.md. diff --git a/goals/G-172-distributed-binary-cpu-floor.md b/goals/archive/G-172-distributed-binary-cpu-floor.md similarity index 81% rename from goals/G-172-distributed-binary-cpu-floor.md rename to goals/archive/G-172-distributed-binary-cpu-floor.md index d241e049..94899e63 100644 --- a/goals/G-172-distributed-binary-cpu-floor.md +++ b/goals/archive/G-172-distributed-binary-cpu-floor.md @@ -1,6 +1,6 @@ # G-172 Distributed binaries declare a CPU floor - no shipped artifact is tuned to its build host -Status: active +Status: achieved 2026-08-07 Scope: src/buildsuites/suite_tcl90/build905.zig and src/buildsuites/suite_tcl86/build86.zig (flagless target/cpu resolution defaults); src/tools/punkzip/build.zig and src/tools/punkres/build.zig (distributed build-path tools); src/buildsuites/suite_tcl90/tools/family_artifacts.tcl (artifact record emission - the recorded floor field); punkbin artifact repo (external c:/repo/jn/punkbin - win32-x86_64/*.toml sidecars, defaults.txt curation); bin/ (the shipped zig-built exes); src/scriptapps/bin/punk-runtime.* (floor reporting on fetch, floor-vs-host verdict on use/run); scriptlib/developer/ (cpu-floor audit tool) Goal: Every binary this project distributes runs on any CPU meeting a declared instruction-set floor - the floor is a property of the build recipe rather than of whichever machine happened to run it, it travels with the artifact in its metadata record, and neither a build nor a publication can silently ship host-tuned code. Acceptance: A flagless build of each distributed-artifact recipe (suite_tcl90, suite_tcl86, punkzip, punkres) on an AVX-512-capable host emits zero instructions above the declared floor - verified by an audit tool that disassembles the produced binaries and reports out-of-floor instructions, carrying the current AVX-512 regression as its fixture; `-Dcpu=native` still yields a host-tuned local build, proving the floor is a default and not a restriction; each published artifact's metadata record states the floor it was built to and punk-runtime surfaces it; and selecting or launching a runtime whose recorded floor the local CPU does not meet produces a named diagnosis instead of a silent 0xC000001D, while fetching for any platform stays ungated. @@ -285,3 +285,60 @@ project's first contact with a new user fails with no message at all. cpu_model - not demonstrable on this v4 host with baseline-floor artifacts (every host meets v1); the mechanism is verified by the mocked-host tests. Behind those: r1-generation disposition and the bin/ punk9* kit rebake. +- 2026-08-07: APPROACH 6 executed (rebuild + republish) - the acceptance is met. + Full `zig build bootstrap` (default steps: install, install-libraries, make-zipfs, + smoke, tklib, tcllib, tcllibc, tcllibc-linux, kit-family, kit-family-artifacts, + library-artifacts) with the pinned released 0.16.0 rebuilt the r2 family WITH the + Approach 3 floor field now in the embedded [provenance] record (re-stage picked up + the 2026-08-07 build905.zig edit; zig-cached C compiles, only the wrap + emit + re-ran). family_check passed for all three members (the new + embed_cpu_floor/embed_cpu_model assertions are green). Audit of the rebuilt r2 + exes: all three PASS at the baseline floor with zmm=0 ymm=0 out-of-floor=0. + Published in-situ to punkbin (git 59e7475, pushed to origin/master): the three + r2 exes + three r2 tomls replaced under their existing names/revisions; each + toml [provenance] now carries cpu_floor="baseline" + cpu_model="x86_64"; the + [tests] tclcore line refreshed to the shipped-codegen gate evidence + (passed=56041 failed=8, the Aug-06 baseline-rebuild test-gate - was 56039/9); + library [tests] lines unchanged; sha1sums.txt: the 6 r2 lines (3 exes + 3 tomls) + updated. build_id unchanged per artifact (the floor field does not enter the + identity digest - intended); sha1/size/built updated (the embedded record text + changed). The [tests] refresh folded in (the record-honesty residual from the + prior republish is cleared). + + Verification of every acceptance conjunct (2026-08-07, this Zen 5 / v4 host): + - flagless build emits zero instructions above the declared floor: the three + republished r2 exes audit PASS (zmm=0) via scriptlib/developer/cpufloor_audit.tcl + (also re-verified against the punkbin working-tree copies post-republish). + - `-Dcpu=native` still yields a host-tuned local build, proving the floor is a + default not a restriction: a temp probe built `-mcpu=baseline` -> zmm=0 PASS + at baseline; `-mcpu=native` -> zmm=123 FAIL at baseline (out-of-floor=151, + first RVA 140002952) and PASS at the v4 floor. (punkzip/punkres were already + rebuilt+republished at zmm=0 in the prior session - the build-path tools are + clean; suite_tcl86's lib tier (tcllibc.dll) was audited clean then too.) + - each published artifact's metadata record states the floor: the republished + tomls carry cpu_floor/cpu_model in [provenance] (verified by diff vs the prior + ab5611d tomls and by punk-runtime info). + - punk-runtime surfaces it: `info` shows the cpu_floor/cpu_model rows + (embedded = sidecar, sha1 matches); `list` shows floor=baseline in the + metadata summary; `use` selects cleanly on the meets verdict (this v4 host + meets the baseline/v1 floor); `fetch` prints `cpu floor: floor=.. model=..` + and stays ungated (code-verified; cross-platform fetch for another machine + is not gated by a local-CPU verdict). + - selecting/launching a runtime whose recorded floor the local CPU does not + meet produces a named diagnosis instead of a silent 0xC000001D: verified by + the mocked-host tests (2026-08-07, both .ps1 and .bash twins) - a recorded + cpu_model=x86_64_v4 against a mocked v2 host yields the `below` verdict with + the 0xC000001D message and use/run exit 1. NOT demonstrable end-to-end on + this v4 host with a real published artifact: every published artifact is + baseline (v1) which every host meets, and no x86-64 level exceeds v4 (the + host's level), so no real below-floor artifact can exist here. The behavior + is present and verified by the mocked-host tests; the limitation is the test + host, not the implementation. + - fetching for any platform stays ungated: code-verified (fetch prints the + floor as information and never gates on the local CPU; the cross-platform + -platform

workflow is a normal cross-machine path). + +## Follow-ons + +Follow-on: r1-generation artifact disposition (replace vs drop) - the r1 exes remain AVX-512-only (2756 zmm each); under the in-situ alpha dispensation they could be replaced at baseline too, or dropped from defaults curation. No live goal home. => open +Follow-on: bin/ punk9* kit rebake with the new floor-bearing runtime (punkproject version-gate discipline applies - the floor surfacing code shipped in 0.57.1; a rebake stamps it into kits). No live goal home. => open