fix(pi): match stock tool-call rendering on newer Pi and watch latest Pi in CI - #4
Merged
Merged
Conversation
…dd non-blocking latest-Pi workflow
…disable-remote.test.sh. All its assertions passed, but its EXIT trap's `rm -rf` failed on read-only git-hooks directories under the fixture root, so the script exited 1. The trap now runs `chmod -R u+rwX` on the fixture root before removing it. The test now exits 0 when run locally. I did not run the full portable serial shard 2
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
Fork CI installs the latest public Pi. Two Firstmate tests fail against Pi 0.99.1 while passing on 0.87.1, the version the fleet runs: tests/fm-calm-pi-extension.test.sh ("rendered export DOM violated the Calm conversation boundary") and tests/fm-pi-branch-extension.test.sh ("Calm-off ToolExecutionComponent rendering differs from Pi stock"). PR #3 (merged) pinned the CI Pi install to 0.87.1 in a separate commit so CI is green, and noted that making the extensions and tests correct for newer Pi is a follow-up. This is that follow-up: Firstmate's Pi extensions and their tests must work with newer Pi releases, so the pin can be replaced by a real compatibility check. Evidence: on the fork CI run, pi 0.99.1 failed those two tests while main's earlier CI on pi 0.87.1 passed them; the two other failing shards were a flaky remote-seed clone unrelated to Pi.
What Changed
.pi/extensions/fm-branch-supervision.ts: Thefm_branch_outcomesandfm_branch_processedcall headers now follow the installed Pi's stock rendering. A one-time probe of the stockToolExecutionComponentchecks whether it shows tool arguments, as Pi 0.99 does and 0.87 does not. If it does, the headers mirror Pi's format (name key=value, orkey: valuelines when expanded). Otherwise they show only the title.tests/fm-calm-pi-extension.test.sh: updated for this behavior..github/workflows/pi-latest.yml(new): a daily and manually triggered, non-blocking workflow. It installs the latest public Pi and runsfm-pi-primary-types,fm-pi-branch-extensionandfm-calm-pi-extension. It does not run on pull requests..github/workflows/ci.yml: the required CI keeps its Pi install pinned to 0.87.1. Only the comments changed, and they now point to thepi-latestworkflow for drift detection.Risk Assessment
Testing
I ran the calm and branch Pi extension tests on the installed Pi 0.87.1 and both passed, which shows there is no regression on the fleet's version. Only 0.87.1 is available, so I could not test Pi 0.99.1, and three calm-test checks skipped.
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
tests/fm-calm-pi-extension.test.sh:4385- The intent says the Firstmate extensions and tests must work with newer Pi, including fm-calm-pi-extension's "rendered export DOM violated the Calm conversation boundary". For this test, the change only replaces bareprocess.exit(1)calls with namedbail(...)calls. No assertion or extension behavior is adapted to Pi 0.99's export DOM. The test will probably still fail on 0.99.1, and the new daily pi-latest workflow will report it instead. The branch-extension test does get a real fix (the stock-header probe). The calm test has no fix for the 0.99 failure. The author needs to decide whether diagnostics plus a non-blocking watcher is acceptable, or whether the calm test must be made to pass on 0.99..github/workflows/ci.yml:115- The intent says the pin should be replaced by a real compatibility check. The change keeps the 0.87.1 pin in both jobs and adds a separate scheduled, non-blocking pi-latest workflow. That is a deliberate scope choice, and it leaves the pin in place.🔧 Fix applied.
1 warning still open:
.github/workflows/ci.yml:115- The intent says the pin should be replaced by a real compatibility check. The change keeps the 0.87.1 pin in both jobs and adds a separate scheduled, non-blocking pi-latest workflow. That is a deliberate scope choice, and it leaves the pin in place.bash tests/fm-calm-pi-extension.test.sh(pi 0.87.1; rc=0, some checks skipped because the package was not found)bash tests/fm-pi-branch-extension.test.sh(pi 0.87.1; rc=0)✅ **Document** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.
Worker-provided validation evidence (Pi 0.99.1)
The pipeline's live step could not drive Pi 0.99.1: the pipeline runner only hosts the fleet's Pi 0.87.1, so its "inconclusive" row is an environment limit, not a product gap. The worker validated 0.99.1 separately:
npm install -g --prefix /tmp/pi99 @earendil-works/pi-coding-agent@0.99.1, then withFM_PI_PACKAGE_DIRpointing at it:tests/fm-pi-branch-extension.test.sh,tests/fm-calm-pi-extension.test.shandtests/fm-pi-primary-types.test.shall pass (typecheck also passes on 0.87.1).bash tests/fm-calm-pi-extension.test.shfailed at "check 5" before the fix. Cause: Pi 0.99's export keepsdisplay:falsecustom messages in the DOM ashook-message hook-message-hiddenblocks (CSS-hidden, toggleable); 0.87.1 omits them. The test now accepts the marker only inside such a hidden block. After the fix the full calm test passes in the same container on both Pi 0.99.1 and Pi 0.87.1.pi-latest.ymlwatches the latest Pi daily and is non-blocking.fm-spawn-compact-adviser-disable-remotetest's EXIT-trap cleanup fix (separate commit from the pipeline) addresses a flaky failure seen in CI; the related remote-seed clone failure infm-remote-secondmate-trace-contextwas not separately diagnosed.