Repository navigation
End-to-end tier, sentinel armed at the first change, terminal-model tests (3.5.0-DEV21, B138, DEV22) - #7
Merged
Conversation
make e2e runs four scenarios as an unprivileged user, each in a fresh container from the demo image: the Quick start in one login session, a repo package's opt-in, flag drift after a profile change, and a build that fails before installing (xfail until 3.5.0-B138 is fixed). They assert on exit codes, pacman -Qi, the state files and leftover sentinels, answering prompts on a pseudo-terminal (tools/e2e/answer.py). Built from 80ccb5b (before B134/B135) the Quick start fails on the lost build record; HEAD passes. The demo image's setup moves to tools/demo/provision.sh so CI can run the same scenarios without podman (make e2e E2E_HERE=1, a job of its own). pre-release gains CI_JOBS, which the CI parity test checks against ci.yml; the release preflight exempts e2e (podman, network). The terminal-model helper from the entry is filed separately as 3.5.0-DEV22. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…5.0-B138, DEV22) B138: the verb runner's sentinel_scope wrote stage_in_progress.toml before execute ran, so a failure before anything changed (build on a missing pkgctl) left stage = "build" behind and the next run refused. The scope now takes the lock on entry but writes the record at the first escalation that changes the system: privileged_argv announces each to on_mutation listeners, and sites that cannot leave the system inconsistent (atomic config writes, provisioning, downloads, the sandbox chroot and slice, recovery display) pass mutates=False. Stages keep arming on entry. The e2e pre-install-failure scenario drops its xfail marker. DEV22: tests/term_model.py models the VT sequences sysforge emits under xterm's and xterm.js's saved-cursor rules; tests/test_terminal_model.py replays the progress bar and update's terminal reset through it. Against the pre-fix progress.py and reset string it fails six ways, matching B132 and B133. 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.
Three roadmap items. The end-to-end tier came first and found the bug, then the bug was fixed, then the remaining terminal-bug class got its own tests.
3.5.0-DEV21:make e2eruns the documented paths on a fresh system. Four scenarios undertools/e2e/run as an unprivileged user, each in a fresh Arch container built from the demo image:They assert on exit codes,
pacman -Qi,build_state.toml,packages.tomland leftover sentinels. Prompts are answered on a pseudo-terminal (tools/e2e/answer.py). All scenarios except the Quick start use local PKGBUILDs.E2E_COMMIT=runs an older revision against today's scenarios.tools/demo/provision.shandinstall.sh, so CI runs the same scenarios without podman, as a newe2ejob (make e2e E2E_HERE=1).pre-releasegainsCI_JOBS, andtest_ci_toolingholds it toci.yml.3.5.0-B138: a command that fails before changing anything no longer blocks the next run. The verb runner'ssentinel_scopestill takes the lock on entry, but now writes the record at the first escalation that changes the system.privileged_argvannounces each such escalation toon_mutationlisteners. Sites that an interruption cannot leave inconsistent passmutates=False: atomic writes, provisioning, downloads, the sandbox chroot and slice, and recovery display. The table is in §Privilege seam. Pipeline stages keep arming on entry. The e2e B138 scenario was marked as expected to fail; that marker is removed and it now passes.3.5.0-DEV22: the progress bar is tested on a model terminal.tests/term_model.pymodels the VT sequences sysforge emits, under xterm's and xterm.js's saved-cursor rules, and raises on any other sequence.tests/test_terminal_model.pyreplays the bar andupdate's terminal reset through it. Against the pre-fixprogress.pyand reset string, six tests fail, matching B132 and B133.Checklist
docs/release-notes/unreleased.md, led by its roadmap ID (DEV21 and DEV22 under Changed, B138 under Fixed)make check-surfacepasses)docs/guides/) still describes it correctly: no guided surface touchedmake pre-releasepasses locally: every gate plusmake e2e(7551 tests; e2e 4/4 PASS), on a tree identical to this head🤖 Generated with Claude Code