For AI agents: the complete documentation index is available at https://docs.phax.run/llms.txt, the full documentation bundle is available at https://docs.phax.run/llms-full.txt, and this page is available as Markdown at https://docs.phax.run/releases/0-35-0.md.

phax 0.35.0

Changes since 0.34.0: v0.34.0...v0.35.0.

Upgrading

  • Commit trailers name no path of the machine. Phase, interactive and held review commits no longer carry Worktree or Session-Id, and Gate-Log is relative to the run's folder (phase-02/checks-attempt-01.log), or none. A stop whose commit was written by an older version still closes, and no record or run file changes. A script that read those trailers reads the phase folder instead: <run>/<phase>/agent-binding.json for the session, the checks-attempt-NN.log files for the gate. See The phase commit for history already written.
  • Records: phax records sync aligns the local records branch. It creates the branch at the remote's tip when it is missing, fast-forwards it when it is behind, and refuses when it has diverged from the remote's or shares no commit with it. --replay recommits the local-only records onto the remote's tip, keeping their trees, messages and authors, and prints the previous tip; a record the remote already holds file for file is left out, and a key the remote also holds with other content is replayed and named. phax never forces the branch. See When the records branch and its remote disagree.
  • Records: phax records sync works for the in-repo destination. It fetches the records branch from publish.remote and no longer says nothing to sync, so it now needs that remote to answer: a script that runs it unconditionally can see it exit 1 on a network or authentication failure.
  • Records: phax records sync --json gains a required branch outcome (created, fast-forwarded, replayed or unchanged) on a cloned or fetched answer, which also gains remoteName. The replayed outcome carries skipped and sharedKeys, and the answer gains replay. A refusal adds one error: RecordsBranchDivergedError (reason, localTip, remoteTip, localOnly, remedy). A script that matches the answer's keys exactly adds them.
  • Records: phax records status --json gains a required branch object (state, localTip, remoteTip), between remote and pending. The text gains a Records branch: line with its remedy; before anything is written or fetched it names phax records sync instead of saying every record is pushed.
  • Records: pending counts only local-only records. On a diverged or unrelated branch, the records the remote already holds are no longer counted.
  • Records: a refused records push names the branch state and the fix. When the branch is behind, diverged or unrelated, the message gives the state and phax records sync or phax records sync --replay, not a plain git push. A record is also written on top of the remote's tip as phax last fetched it, so a lagging branch catches up with the write.
  • Records: a refused records push is always reported. phax publish and phax run print it as a warning, where it was shown only with --verbose.
  • Artifacts: the --json record of artifact new --headless and artifact decide gains a required branchNote beside pushWarning: the note of a record kept on a diverged or unrelated records branch, or null. pushWarning still names only a failed push.

Record format, manifests and versions are unchanged. No migration is needed, but records an earlier version left on a stranded branch (a fresh clone, a second machine) stay pending until you run phax records status, then phax records sync --replay when it names it.

Fixes

  • fix(commit): drop machine paths and session id from phase commit trailers (faed20e)
  • fix(commit): review fixes for the commit trailers (c7839fd)
  • fix(records): review fixes for the records branch tip (39008aa)
  • fix(records): a shared key no longer stops a replay (2a7527d)

Other

  • feat(records): classify the records branch against its remote tip (ee3467c)
  • feat(git): add merge-base, commit listing, recommit and guarded ref updates (26321a6)
  • feat(records): parent each record on the remote tip when the local branch lags (a997261)
  • feat(records): sync creates, fast-forwards and replays the records branch (fffd5e0)
  • feat(records): status shows the branch state and refused pushes name the fix (81d0a60)