Repository navigation
fix: preserve Pi stock rendering and stabilize remote provisioning - #10
Merged
Merged
Conversation
…on tool rendering
…ed verification evidence
MrGTV-love
force-pushed
the
fm/fm-pi-render-drift
branch
from
October 4, 2026 20:05
7801c01 to
a0b9cc2
Compare
…igrated all four HTML-renderer fixture callers across the Calm and branch tests from obsolete getToolDefinition to Pi 1.0.2's getToolRenderers. Replaced the non-triggering Linux libc interposer with Git's real pack-creation hook, configured through a private fixture config; the portable regression verifies successful provisioning and object independence after removing source objects. Updated matching documentation and removed temporary verification artifacts. Verification passed: focused Calm renderer/lifecycle and branch rendering/export cases against Pi 1.0.2, provision-only lifecycle including the source-repack regression, and shell syntax checks. Full lifecycle verification reached a later unrelated restart-checkpoint assertion but failed because worktree-contained temporary fixtures discovered the enclosing checkout; a Git ceiling override did not resolve that local limitation. No pipeline, push, or other gate phase was invoked
…e in tests/fm-calm-pi-extension.test.sh. The reload geometry check incorrectly required sampling a transient progress banner, so it could fail after a successful reload. Removed the single-use transient helper and now wait for Pi’s persistent reload-completion status before asserting transcript geometry. Checked sibling transitions; none require transient-first sampling. Updated the existing verification documentation. Against worktree-local Pi 1.0.2, delaying the first post-command viewport sample reproduced the failure before the fix and passed afterward, including thinking expansion/collapse, Calm off/on, persisted history, and restart. Shell syntax passed. The affected-suite run passed the repaired geometry check and all preceding checks, but failed later in the separate interactive fixture because its initial capture lacked CALM_E2E_OUTPUT; a full-suite pass is not claimed. Removed all temporary verification scaffolding. No pipeline-control, push, or other gate phase was invoked
…s/fm-calm-pi-extension.test.sh. Pi 1.0.2 draws only the visible transcript tail on restore; the 44-row fixture clipped CALM_E2E_OUTPUT before it was ever drawn, so tmux scrollback could not recover it and the Calm-off assertion failed. Increased terminal height to 200 rows for initial restore, transcript visibility checks, and restart, while preserving the short and narrow working-ship resize probes. Updated the existing verification documentation. Reproduced the exact failure locally before the fix; afterward, the complete interactive scenario and all 15 cases in the affected Calm suite passed against Pi 1.0.2, including real Chrome export-DOM assertions, Ctrl+O, Calm toggles, restart, and resize behavior. Shell syntax passed. Removed temporary verification artifacts. The full serial shard was not rerun; no pipeline-control, push, or other gate phase was invoked
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 main CI (MrGTV-love/firstmate) now fails two tests in the "Behavior portable serial" shards 2 and 4 on every PR and on main itself: "rendered export DOM violated the Calm conversation boundary" and "Pi outcomes rendering consumers must preserve stock behavior ... Error: Calm-off ToolExecutionComponent rendering differs from Pi stock". Main passed them at 2026-09-29 06:05 (run 36529338484); fm-subagent-guard-fix reproduced both on current main, so the cause is outside our changes (most likely a newer Pi release). Shards 7 and 8 also failed once on PRs 6 and 7 as flakes (remote seed did not provision the route under test). These red checks block merging #6 and #7, and will block the launcher and monitor fixes. The captain does not merge red PRs and wants no non-valuable friction.
What Changed
ToolExecutionComponent, preserving argument previews, result formatting, expansion, and error styling while retaining Calm hiding and stock export fallback.git clone --no-localto avoid source-repack races, add coverage for independent cloned objects, and expose provisioning and inheritance failure output.Risk Assessment
✅ Low: The changes are bounded compatibility fixes that delegate formatting to Pi, preserve existing execution and visibility controls, and avoid Git's local object-copying race; no material source defect or unnecessary component was substantiated.
Testing
After correcting disposable tmux setup issues, the original 64-case Calm/branch acceptance passed on both Pi versions. Live Pi tool execution and Chromium exports confirmed stock previews, expansion, error rendering, Calm hiding/restoration, and export boundaries; real Git provisioning passed concurrent publication, foreign-home refusal, and source-repack checks. Screenshots, HTML, terminal captures, and provisioning output were preserved, and disposable material was removed. No broad suite, lint, or static analysis was run.
Evidence: Native supervision tool argument previews and collapsed expansion hint
Source: Native supervision tool argument previews and collapsed expansion hint
Evidence: Calm hides supervision rows after export while preserving confirmation
Source: Calm hides supervision rows after export while preserving confirmation
Evidence: Actual native supervision HTML export
Source: Actual native supervision HTML export
Evidence: Real remote-home provisioning completed during source repack
Source: Real remote-home provisioning completed during source repack
Evidence: Provisioning refuses a competing foreign home
Source: Provisioning refuses a competing foreign home
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 1 issue found → auto-fixed ✅
tests/fm-calm-pi-extension.test.sh:1653- The HTML fixture now supports only Pi 1.0.2's lookup interface, regressing verification on documented older versions. Pi 0.99.0's createToolHtmlRenderer invokes getToolDefinition; supplying only getToolRenderers causes a caught lookup error and returns undefined. Consequently, assertStockHtmlRendering('/export calm.html', '\r') fails despite correct Calm behavior. The same invariant must hold at tests/fm-calm-pi-extension.test.sh:1684 (the non-submit assertion instead passes on lookup failure) and tests/fm-pi-branch-extension.test.sh:5112 and :5113 (both fallback assertions can pass without invoking either renderer). Preserve both vendor lookup interfaces in these fixtures rather than implicitly raising their supported version. Vendor evidence: https://unpkg.com/@earendil-works/pi-coding-agent@0.99.0/dist/core/export-html/tool-renderer.js🔧 Fix applied.
✅ Re-checked - no issues remain.
✅ **Test** - passed
✅ No issues found.
pi --versionandnpm root -gidentified the installed runtime; workspace-localnpm install --prefix .gate-test-lab/vendor099 --no-audit --no-fund --ignore-scripts @earendil-works/pi-coding-agent@0.99.0supplied the older vendor.Ran all original Calm acceptance cases throughbash tests/.gate-calm-validation.shon Pi 1.0.2 andbash tests/.gate-calm099-validation.shon Pi 0.99.0. Disposable drivers changed only teardown to preserve generated evidence. An initial overlong tmux socket path was corrected before successful runs.Ranbash tests/fm-pi-branch-extension.test.shwithFM_PI_PACKAGE_DIRselecting Pi 1.0.2 and 0.99.0, preserving the full original 64-case combined Calm/branch acceptance.RanFM_TEST_PROVISION_ONLY=1 bash tests/.gate-remote-validation.sh. The disposable driver excluded the workspace-local lab from fixture copying and preserved evidence; provisioning assertions were unchanged.Launched real Pi CLIs with isolated home/config/session directories and production Calm/branch extensions. A deterministic local provider caused actualfm_branch_outcomes(recent=14)andfm_branch_processed(through=0/999)execution. Exact launch commands are preserved in branch-live/launched-command.txt and launched-command099.txt.Drove nativeCtrl+O,/calm,/export, and/calmrestoration on both Pi versions; captured terminal panes and native exported session data.Loaded actual generated exports in isolated Chromium, clickedShow hidden messagestwice andToggle tools, checked visible conversation boundaries and stock expansion, and captured screenshots.Stopped isolated Pi/tmux and HTTP server processes, closed the browser tab, removed disposable drivers/dependencies/fixtures, and verified their removal.✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.