Repository navigation
End-to-end scenarios for four med/small DEV items; config merge escalates (4.0.0-B3) - #17
Merged
Merged
Conversation
…ates (4.0.0-B3) Four scenarios: 45-interactive (3.5.0-DEV31), 65-external-install (3.5.0-DEV28), 75-config-merge (3.5.0-DEV30) and 96-toolchain-kernel-handoff (3.5.0-DEV25), plus the e2e-hello-alt stand-in that conflicts with e2e-hello without providing it. config merge comes off uncovered.toml. 75-config-merge found 4.0.0-B3: [r]emove and [o]verwrite wrote the root-owned /etc/sysforge as the user and crashed with PermissionError. Removal now falls back to the privilege seam; overwrite goes through atomic_write.replace_file. Tier: e2e (root versus the user), plus unit tests over a read-only dir. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AUR cbonsai declares provides=(cbonsai) conflicts=(cbonsai). pkg_supersedes_installed counted that as a drop-in for the installed cbonsai, so batch_install_pkgs passed --ask=4, which pacman applies to every conflict question in the transaction. In CI's 45-interactive, the non-interactive update rebuilt cbonsai with e2e-hello-alt and removed e2e-hello without asking; the leftover e2e-hello-alt then failed 50-maintain, 80-inspect and 99-self-uninstall. The package's own pkgname is now subtracted, as get_installed_substitutes already does. Tier: e2e (45-interactive under --here, which CI runs), plus a unit test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under --here the scenarios share one system, and 30-flag-drift leaves a build record for e2e-hello that a makepkg reinstall does not clear. The profile change then drifted e2e-hello as well as e2e-hello-alt, putting both sides of the conflict in one transaction, which pacman rejects as unresolvable without ever asking "Remove e2e-hello?". Forget the record first and assert it is gone, so only e2e-hello-alt rebuilds. Isolated runs start from a fresh snapshot, which is why this passed locally. Co-Authored-By: Claude Opus 5.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.
Summary
Implements the four med-priority, small-effort ROADMAP items, all end-to-end scenarios:
3.5.0-DEV2596-toolchain-kernel-handoffrun toolchainwithskip_buildsaves clang (stock_llvm), then gcc, inpipeline_state.toml;run kernel --dry-runplans with that compiler whenkernel.tomlnames none3.5.0-DEV2865-external-installtreereinstalled withpacman -Sis demoted byupdate, not rebuilt; installinglldmakesupdate -vshow the toolchain reminder once. Networked.3.5.0-DEV3075-config-merge[ui] mergeset to a script;config mergeadopts a.sfnewin/etc/sysforge, keeps the user's edit, removes the.sfnew. Removed fromuncovered.toml.3.5.0-DEV3145-interactiveupdateandbuildwithout--interactive; with it, pacman's question reaches the terminal and a yes swaps the packages. New stand-inpkgs/e2e-hello-alt.Bug found:
4.0.0-B375-config-mergefound thatconfig merge's[r]emoveand[o]verwritewrote to the root-owned/etc/sysforgeas the user and crashed withPermissionError. Removal now falls back to the privilege seam (rm -f,mutates=False). Overwrite now goes throughatomic_write.replace_file, which also keeps the live file's mode and owner.Test tier: e2e (
75-config-merge, root versus the user), plus two unit tests over a read-only dir intests/test_config_merge.py.Notes
65-external-installpauses 2 seconds before the user'spacman -S. The reconcile sentinels have one-second resolution, and a tie counts as sysforge's own install by design, so apacman -Sin the same second is not demoted. No person at a prompt can run it that fast.Test plan
make e2e SCENARIO="interactive external-install config-merge handoff": all four PASS in podmanmake test: 7729 passed, 4 skippedmake lint,make check-standards,make check-design,make check-surface,make check-shipped,make check-roadmap-tablee2ejob (E2E_HERE=1, shared system): not run locally, since it runs as root on the host🤖 Generated with Claude Code