ci: pin the Pi package and force regular TUI mode in the Calm Pi E2E - #50
Merged
Merged
Conversation
Pi 1.0.0 made fullscreen the default TUI mode. Fullscreen keeps no terminal scrollback, so the Calm interactive E2E's tmux captures lost the restored transcript rows and failed with "calm mode was not off by default". The fixture now sets tuiMode to regular, which matches how bin/fm-spawn.sh launches Pi and is already the default on Pi 0.99. CI installed the unpinned latest Pi, so the release reddened every PR the day it shipped. Both Pi install steps now install one pinned FM_CI_PI_VERSION, print the pinned and installed versions, and fail on a mismatch, with a guard in tests/fm-ci-workflow.test.sh. The Pi adapter note now records the new tuiMode default.
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.
Intent
CI on this repository is red for every new PR since today: the job 'Behavior portable serial 6' fails in tests/fm-calm-pi-extension.test.sh at line 4261 with 'not ok - calm mode was not off by default (missing: CALM_E2E_OUTPUT)'. Evidence: PR 49 (#49, run 37011610115, job 110862193628) changes only bin/fm-context-budget.sh, its test and docs, and failed identically on a rerun; the CI step 'Install the Pi package for the Pi extension tests' installed @earendil-works/pi-coding-agent@1.0.0 today, while main's last green run (36854596778, one day earlier) ran on the previous Pi release (the fork's Calm work targets Pi 0.99, see commit dbefebef 'match Pi 0.99 stock rendering'). A rerun of main's run was started to confirm it fails the same way. The firstmate repo is the fleet's own code, so this blocks every firstmate PR.
What Changed
.github/workflows/ci.ymlnow installs@earendil-works/pi-coding-agentat the exact version in a new workflow-levelFM_CI_PI_VERSION(1.0.0) instead of the latest release. Both install steps then runpi --version, print the result, and fail if it differs from the pin.tests/fm-calm-pi-extension.test.shwrites"tuiMode":"regular"into the E2E's Pisettings.json. Pi 1.0.0 made fullscreen the default TUI mode, and fullscreen leaves no scrollback for the capture to read, so the "calm mode off by default" check failed withmissing: CALM_E2E_OUTPUT. Regular mode matches howbin/fm-spawn.shlaunches Pi.tests/fm-ci-workflow.test.shaddstest_pi_package_install_is_pinned_and_logged. It extracts every CI Pi install step with its workflow, job, and step env, then runs each one against a fakenpmandpi. It checks that the pin is an exact version, that all steps use the same pin, that the step prints the version, and that the step fails on a version mismatch. The.agents/skills/harness-adapters/references/harness/pi.mdnote on thetuiModedefault is updated to sayfullscreenis the default from Pi 1.0.0 and earlier releases default toregular.Risk Assessment
✅ Low: The change is small and CI-only: it pins Pi to the 1.0.0 that broke CI, sets tuiMode to regular in the one failing E2E fixture, and adds a behavioural test that runs the real install steps against a fake npm and pi; I could not run it against Pi 1.0.0 here.
Testing
I reproduced the CI failure with Pi 1.0.0 on the old test file, then showed the fixed test file passes in full on the same Pi, with the interactive terminal test running and not skipped. The workflow guard test passes, but it is a static check of ci.yml, so the pin was not driven in a real GitHub Actions run. The temp Pi and tmux were removed and the worktree is clean.
Evidence: Fixed test, Pi 1.0.0, tmux present: all pass
Source: Fixed test, Pi 1.0.0, tmux present: all pass
Evidence: Base test, Pi 1.0.0: reproduces CI failure
Source: Base test, Pi 1.0.0: reproduces CI failure
Evidence: CI workflow guard test
Source: CI workflow guard test
Evidence: First fixed run without tmux (interactive E2E skipped, so not counted as evidence)
Source: First fixed run without tmux (interactive E2E skipped, so not counted as evidence)
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
Installed @earendil-works/pi-coding-agent@1.0.0 into a temp folder and built tmux 3.5a there (neither was on this machine)bash tests/fm-calm-pi-extension.test.shon the target commit with Pi 1.0.0 and tmux: all tests pass, none skipped, including the interactive E2ESame test file taken from the base commit 3acc296, run with Pi 1.0.0 and tmux: fails with 'not ok - calm mode was not off by default (missing: CALM_E2E_OUTPUT)'bash tests/fm-ci-workflow.test.sh: passes, including the new check that both CI Pi installs are pinned to 1.0.0, print the version and fail on a mismatch (static check of ci.yml only)✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.
Built by: claude/opus at high