Browse Source
Two halves of one file-relative policy decision. G-134 (new, proposed): advisory post-assembly punk::zip::archive_info probe at the G-133 seam pins make.tcl's own kit outputs archive-relative - by-construction property becomes a checked contract; mkzip -offsettype file and modpod stay available for deliberate manual creation. G-128: the straight file-relative refusal becomes default-refuse with a consent-flag preserve (central-directory offset fix-up by the shift delta, zip64/multi-disk still refused), plus Notes recording the rationale, the Authenticode sign-after-stamping rule, and the convention-conversion parking. goals_lint clean (85 active, 49 archived). Assisted-by: harness=opencode; primary-model=openrouter/moonshotai/kimi-k3; api-location=openrouter.aimaster
3 changed files with 92 additions and 1 deletions
@ -0,0 +1,71 @@
|
||||
# G-134 Baked kits pinned archive-relative: advisory offset-style probe on assembled kit images |
||||
|
||||
Status: proposed |
||||
Scope: src/make.tcl (post-assembly offset-style probe at the G-133 advisory-check seam, recapped reporting); src/modules/punkboot/utils-999999.0a1.0.tm (probe predicate beside the G-133 scan helpers, guarded require; bootsupport copies via established sync channels); src/tests/modules/punkboot/utils/ + src/tests/shell/testsuites/punkexe/ (characterization); src/AGENTS.md (what the pin does and does not guarantee) |
||||
Goal: every kit image make.tcl assembles is verified to carry an ARCHIVE-relative zip payload - probed with punk::zip::archive_info post-assembly - so the bake pipeline's archive-relative output property becomes a checked contract rather than a by-construction accident, and any future assembly path (new kit type, modpod or accelerator change) that emits file-relative offsets surfaces at bake time instead of when G-128's stamper refuses punkshell's own kits. |
||||
Acceptance: each assembled kit image is probed with punk::zip::archive_info and a recapped BUILD-WARNING naming the kit is emitted when offsetstyle is file (advisory per the G-133 posture - the kit still builds and deploys, unlike the G-125 hard gate); plain and none results (no zip attached - the metakit kit shape G-131 targets) are silence, not warnings: the pin covers zip offset convention, not the presence of a zip; today's bakes produce no warning (G-124's measured baseline: every built kit archive-relative); the probe predicate lives in punkboot::utils beside the G-133 scan helpers, called through the same guarded require so a stale bootsupport snapshot degrades it to a NOTE, and tclsh src/make.tcl check reports its ACTIVE/UNAVAILABLE state; characterization pins the warning on a file-relative kit fixture and silence on the archive-relative kit set; scope is make.tcl's own assembly paths only - punk::zip::mkzip -offsettype file and modpod's equivalent REMAIN available for deliberate manual creation of file-relative artifacts (user decision 2026-07-27: the format works and serves naive zip-tooling/SFX-repair interop, it is simply not what our pipeline emits), and external zip-repair tools' file-relative output remains tolerated on input by the G-124 reader and normalized away by any re-bake. |
||||
|
||||
## Context |
||||
|
||||
Archive-relative output has been by-construction, never contractual: it falls out of |
||||
mkzip's `-offsettype archive` default and modern zipfs mkimg, and G-124 measured it |
||||
across the store 2026-07-26 (15 archive-relative runtimes plus every built kit; the |
||||
single file-relative artifact is `tclsh90b4_piperepl.exe`, the historical mkimg |
||||
convention). Input artifacts may legitimately be file-relative - 3rd-party zipfs kits, |
||||
external zip-repair output - and the merge normalizes them because the payload is |
||||
always rebuilt from extracted members. But nothing fails loudly if a future assembly |
||||
path regresses the output convention; the first symptom would be G-128's stamper |
||||
refusing punkshell's own kits. This goal pins the property at the seam G-133 |
||||
established for advisory payload checks. |
||||
|
||||
Decided 2026-07-27 alongside G-128's consented file-relative preserve amendment: the |
||||
file-relative format is supported everywhere it can arrive (the reader tolerates it, |
||||
the stamper preserves it with consent, the writers can emit it on request) - this pin |
||||
asserts only what OUR pipeline emits by default. |
||||
|
||||
## Approach |
||||
|
||||
- One probe at the post-assembly seam beside G-133's binary-arch scan: |
||||
`punk::zip::archive_info` on the finished image; BUILD-WARNING unless offsetstyle is |
||||
`archive`, recapped at end of run. Per-kit cost is one EOCD scan + central-directory |
||||
walk, only when the kit rebuilds (G-124 measured ~735ms for an 841-member archive - |
||||
the same order as G-133's arch scan). |
||||
- Advisory, matching G-133: warnings never block build or deploy. |
||||
- No new instrument: G-124's archive_info is the whole probe; the punkboot::utils |
||||
predicate wraps it so it unit-tests without a bake. |
||||
|
||||
## Alternatives considered |
||||
|
||||
- Hard gate (G-125-style kit failure) - rejected (user decision 2026-07-27): the |
||||
property holds by construction today and make.tcl has no deliberate file-relative |
||||
path; a hard gate would fire only on a regression already loud in tests and would |
||||
block any future deliberate per-kit opt-out. G-125's gate exists for user-facing |
||||
undeployable kits; this is a developer-facing convention notice. |
||||
- Documentation-only pin in src/AGENTS.md - rejected as enforcement-free: prose does |
||||
not fire when the regression lands. |
||||
|
||||
## Notes |
||||
|
||||
- Related: G-124 (achieved 2026-07-26 - see goals/archive/G-124-punkzip-reader.md) - |
||||
supplies the probe (archive_info: offsetstyle archive|file|plain|none plus |
||||
dataoffset) and the store survey that is this pin's baseline. |
||||
- Related: G-133 (achieved 2026-07-27 - see |
||||
goals/archive/G-133-bake-payload-consistency-checks.md) - the advisory-check seam, |
||||
recapped BUILD-WARNING convention, guarded-require degradation and `make.tcl check` |
||||
reporting this probe follows. |
||||
- Related: G-125 - the hard-gate contrast recorded under Alternatives. |
||||
- Related: G-128 - the consumer that motivated the pin: its stamper refuses |
||||
file-relative payloads by default (consent-flag preserve per the 2026-07-27 |
||||
amendment); without this pin a pipeline regression surfaces there first, on our own |
||||
kits. |
||||
- Related: G-122 (achieved - see goals/archive/G-122-host-target-platform-split.md) / |
||||
G-127 - the zipfs-less and cross-target assembly paths under the probe; both assemble |
||||
via mkzip/mkimg archive-relative defaults today. |
||||
- Related: G-131 - metakit-shape kits carry no zip; the probe's `none` result is |
||||
silence, not a warning. |
||||
- Overlap survey 2026-07-27: `goals_xref paths src/make.tcl src/bootsupport src/tests` |
||||
- no live goals intersect src/make.tcl or src/tests; src/bootsupport produced weak |
||||
lexical hits only (G-004, G-024, G-026, G-132 - bootsupport path mentions, no |
||||
semantic overlap with an offset-style probe). `goals_xref report` reviewed: no |
||||
unlinked pair concerns an output offset-convention check. The G-124/G-133 anchors are |
||||
archived; the relations above are from reading. |
||||
Loading…
Reference in new issue