Repository navigation
feat(time-model): pin shift=4,sleep=off and carry the replay-flush QEMU patch - #47
Merged
Merged
Conversation
darwin67
force-pushed
the
rfd-4-phase0-pin
branch
4 times, most recently
from
September 22, 2026 17:09
b0aa731 to
1bb02f6
Compare
…MU patch The owner approved carrying the patch, so RFD 4 Phase 0's last two items are implemented: the model is pinned and the product launches it. - flake.nix applies poc/time-model/qemu-nosleep-replay-flush.patch to the pinned emulator, which is the single way the repository builds it; the spike expression that first built the same patch is removed, and the build is restricted to the x86-64 system target with documentation off. A new devShells.light without QEMU serves the jobs that never run it. - crates/simferret/src/vm.rs pins TIME_MODEL to shift=4,sleep=off, with the doc comment rewritten to say why the patch is carried and that it is dropped when upstream includes the fix; the argument-vector assertion now asserts the pinned options. - poc/time-model/reference-host-values.txt records the patched emulator's digest and the re-measured values, which are unchanged. - The continuous-integration host-input assertion expects delivered, which keeps the patch load-bearing, and its regression cases follow. - rfd/0004/EVIDENCE.adoc records the pin, the verification, and the cost; rfd/0004/README.adoc records the carried patch and the drop intent; rfd/0004/IMPLEMENTATION.org has Phase 0 at DONE with the last two items checked; docs/time-model.adoc follows. CI cost: the unrestricted patched build was 16 minutes end to end on the reference host (configure 3m16s, build 11m28s, fixup 1m02s); restricting the target and dropping documentation brought it under about eight minutes, and the dev-shell split means only the qemu-replay job builds it instead of every Linux job. Review fixes: the record now separates the historical stock and spike results from the pinned build (its digest, and the replay-log growth the patch causes), docs/time-model.adoc and the gate and probe comments describe the pinned state, and the checklist's recorded-identity half is attributed to Phase 1.
darwin67
force-pushed
the
rfd-4-phase0-pin
branch
from
September 22, 2026 17:10
1bb02f6 to
d738380
Compare
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.
Implements the pin the owner approved, so RFD 4 Phase 0's last two items are done and the product launches the pinned model.
What changed
flake.nixappliespoc/time-model/qemu-nosleep-replay-flush.patchto the pinned emulator — one way to build it, with the spike expression removed — restricted to the x86-64 system target with documentation off, plus adevShells.lightwithout QEMU for the jobs that never run it.crates/simferret/src/vm.rspinsTIME_MODEL = "shift=4,sleep=off", with the doc comment rewritten to say why the patch is carried and that it is intended to be dropped when upstream includes it; the argument-vector assertion now asserts the pinned options.poc/time-model/reference-host-values.txtrecords the patched emulator's digest and the re-measured values.delivered, which keeps the patch load-bearing, and the regression cases follow.rfd/0004/EVIDENCE.adocrecords the pin, its verification, and its cost;rfd/0004/README.adocrecords the carried patch and the drop intent;rfd/0004/IMPLEMENTATION.orghas Phase 0 atDONEwith the last two items checked;docs/time-model.adocfollows.Verification (reference host, patched emulator)
reproducible, and every measurement equal to the record — the patch does not move the guest's measurements.scripts/time-model-gate.shpasses with the patched digest in the reference record.scripts/time-model-input-probe.sh --expect deliveredreportsinput=deliveredwithstopped_by_probe=true.record_and_replay_launch_the_configured_time_modelpasses.scripts/phase4-acceptance.shrecords a run under the pinned model and replays it twice with matching normalized events, assertions, and semantic outcome digest.make check-rfdspasses; the remaining suites run in this PR's CI.CI cost
x86_64-softmmuwith docs off (under about eight minutes here), and paid by one job —qemu-replay— because the format, lint, and test jobs usedevShells.light.Next
The upstream report (the patch plus the input probe as a regression test) is a separate docs PR; it will not be submitted upstream from here.
Review fixes
The evidence now separates the historical stock and unrestricted-spike results
from the pinned build (its digest, and the replay-log growth the patch causes:
3,386,955 bytes against 330,255),
docs/time-model.adocand the gate and probecomments describe the pinned state rather than the blocker, the checklist's
recorded-identity half is attributed to Phase 1, and the harness comments say
what the synthetic non-delivery case is for.
Follow-up review fixes
The replay-log growth is recorded as an observation rather than an explained one;
the historical table's commands are marked as needing the stock emulator; the
decision paragraph reads as history the owner has since taken; the remaining
current-state sentences about the patch and the CI assertion are updated; the
index links
flake.nixrather than the deleted spike expression; the harnesscomment is expectation-only; and the completed checklist item names what it
actually asserts, with the recorded-identity comparison left to Phase 1.