[37m2026-03-19 07:20:38.409[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37mnative:1[39m[0m[0m[1m[37m Pochi[39m[22m[0m[0m pochi v0.6.0 [37m2026-03-19 07:20:38.520[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:503027[39m[0m[0m[1m[37m loadAgents[39m[22m[0m[0m Loaded 4 custom agents (4 valid, 0 invalid) [37m2026-03-19 07:20:38.521[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:503028[39m[0m[0m[1m[37m loadSkills[39m[22m[0m[0m Loaded 2 skills (2 valid, 0 invalid) [37m2026-03-19 07:20:38.600[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:439288[39m[0m[0m[1m[37m PochiVendor[39m[22m[0m[0m JWT is expiring or missing, fetching a new one [37m2026-03-19 07:20:40.117[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:415701[39m[0m[0m[1m[37m MCPHub[39m[22m[0m[0m MCP servers configuration changed via signal: [37m2026-03-19 07:20:40.118[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:415813[39m[0m[0m[1m[37m MCPHub[39m[22m[0m[0m Build MCPHub Status [37m2026-03-19 07:20:40.216[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:502453[39m[0m[0m[1m[37m TaskRunner[39m[22m[0m[0m Starting TaskRunner... [37m2026-03-19 07:20:40.305[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:454195[39m[0m[0m[1m[37m listFiles[39m[22m[0m[0m Listing workspace files from /home/user/repo with maxItems [33m500[39m [37m2026-03-19 07:20:40.426[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:496495[39m[0m[0m[1m[37m generateTaskTitle[39m[22m[0m[0m Generating task title, old: null, new: The repo at `/home/user/repo` has a 5-commit stack where the current working copy contains fixup changes to `parser.py`, `formatter.py`, and `runner.py` — which correspond to commits 1, 3, and 5 respectively. Use `jj absorb` to automatically distribute these fixups into the correct target commits. Verify each target commit now contains the combined changes. Write an absorb report to `/home/user/absorb_report.md` showing which changes were absorbed into which commits. [37m2026-03-19 07:20:52.131[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:454195[39m[0m[0m[1m[37m listFiles[39m[22m[0m[0m Listing workspace files from /home/user/repo with maxItems [33m500[39m [37m2026-03-19 07:20:52.323[39m[0m[0m [33m[1mWARN[22m[39m[0m[0m [37m[39m[0m[0m[1m[37m GitStatus[39m[22m[0m[0m readGitStatus timed out after 12000ms, returning undefined [37m2026-03-19 07:20:54.505[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:496495[39m[0m[0m[1m[37m generateTaskTitle[39m[22m[0m[0m Generating task title, old: The repo at `/home/user/repo` has a 5-commit stack where the current working copy contains fixup changes to `parser.py`, `formatter.py`, and `runner.py` — which correspond to commits 1, 3, and 5 respectively. Use `jj absorb` to automatically distribute these fixups into the correct target commits. Verify each target commit now contains the combined changes. Write an absorb report to `/home/user/absorb_report.md` showing which changes were absorbed into which commits., new: Use jj absorb to distribute working copy fixups into their target commits and write a report [37m2026-03-19 07:20:57.235[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:454195[39m[0m[0m[1m[37m listFiles[39m[22m[0m[0m Listing workspace files from /home/user/repo with maxItems [33m500[39m [37m2026-03-19 07:21:00.911[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:454195[39m[0m[0m[1m[37m listFiles[39m[22m[0m[0m Listing workspace files from /home/user/repo with maxItems [33m500[39m [37m2026-03-19 07:21:04.139[39m[0m[0m [33m[1mWARN[22m[39m[0m[0m [37m[39m[0m[0m[1m[37m GitStatus[39m[22m[0m[0m readGitStatus timed out after 12000ms, returning undefined [37m2026-03-19 07:21:07.400[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:454195[39m[0m[0m[1m[37m listFiles[39m[22m[0m[0m Listing workspace files from /home/user/repo with maxItems [33m500[39m [37m2026-03-19 07:21:09.242[39m[0m[0m [33m[1mWARN[22m[39m[0m[0m [37m[39m[0m[0m[1m[37m GitStatus[39m[22m[0m[0m readGitStatus timed out after 12000ms, returning undefined [37m2026-03-19 07:21:12.921[39m[0m[0m [33m[1mWARN[22m[39m[0m[0m [37m[39m[0m[0m[1m[37m GitStatus[39m[22m[0m[0m readGitStatus timed out after 12000ms, returning undefined [37m2026-03-19 07:21:19.404[39m[0m[0m [33m[1mWARN[22m[39m[0m[0m [37m[39m[0m[0m[1m[37m GitStatus[39m[22m[0m[0m readGitStatus timed out after 12000ms, returning undefined [37m2026-03-19 07:25:41.671[39m[0m[0m [32m[1mDEBUG[22m[39m[0m[0m [37m/$bunfs/root/pochi:503113[39m[0m[0m[1m[37m TaskRunner[39m[22m[0m[0m Failed: [97m[101m[1m TypeError [22m[49m[39m[0m[0m The DOMException.name getter can only be used on instances of DOMException, 1107, 17, 1107, 17, internal:util/inspect[0m[0m error stack: • [33minspect[39m[0m[0m formatError[0m[0m [37mutil/inspect:1107[39m[0m[0m • [33minspect[39m[0m[0m formatRaw[0m[0m [37mutil/inspect:854[39m[0m[0m • [33minspect[39m[0m[0m formatWithOptionsInternal[0m[0m [37mutil/inspect:1661[39m[0m[0m • [33mpochi[39m[0m[0m transportFormatted[0m[0m [37m/$bunfs/root/pochi:417727[39m[0m[0m • [33mpochi[39m[0m[0m log[0m[0m [37m/$bunfs/root/pochi:417843[39m[0m[0m • [33mpochi[39m[0m[0m onError[0m[0m [37m/$bunfs/root/pochi:500661[39m[0m[0m • [33mpochi[39m[0m[0m makeRequest[0m[0m [37m/$bunfs/root/pochi:432009[39m[0m[0m • [33mpochi[39m[0m[0m async <anonymous>[0m[0m [37m/$bunfs/root/pochi:431766[39m[0m[0m • [33mpochi[39m[0m[0m async step[0m[0m [37m/$bunfs/root/pochi:502582[39m[0m[0m • [33mpochi[39m[0m[0m async run[0m[0m [37m/$bunfs/root/pochi:502459[39m[0m[0m • [33mpochi[39m[0m[0m async <anonymous>[0m[0m [37m/$bunfs/root/pochi:503113[39m[0m[0m • [33mnative[39m[0m[0m processTicksAndRejections[0m[0m [37mnative:7[39m[0m[0m[0m[0m The DOMException.name getter can only be used on instances of DOMException
Hit:1 http://security.ubuntu.com/ubuntu noble-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu noble InRelease
Hit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version (8.5.0-2ubuntu10.8).
0 upgraded, 0 newly installed, 0 to remove and 13 not upgraded.
downloading uv 0.9.7 x86_64-unknown-linux-gnu
no checksums to verify
installing to /home/user/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
Downloading pygments (1.2MiB)
Downloading pygments
Installed 6 packages in 27ms
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-8.4.1, pluggy-1.6.0
rootdir: /tests
plugins: json-ctrf-0.3.5
collected 7 items
../../../tests/test_outputs.py FFFF..F [100%]
=================================== FAILURES ===================================
________________________ test_commit_1_has_strip_parser ________________________
def test_commit_1_has_strip_parser():
result = jj("file", "show", "parser.py", "-r", "commit-1")
assert result.returncode == 0
> assert "strip()" in result.stdout, \
"commit-1 parser.py should have the strip() fixup absorbed"
E AssertionError: commit-1 parser.py should have the strip() fixup absorbed
E assert 'strip()' in 'def parse(data):\n return data.split(",")\n'
E + where 'def parse(data):\n return data.split(",")\n' = CompletedProcess(args=['jj', 'file', 'show', 'parser.py', '-r', 'commit-1'], returncode=0, stdout='def parse(data):\n return data.split(",")\n', stderr='').stdout
/tests/test_outputs.py:24: AssertionError
_____________________ test_commit_3_has_improved_formatter _____________________
def test_commit_3_has_improved_formatter():
result = jj("file", "show", "formatter.py", "-r", "commit-3")
assert result.returncode == 0
> assert "if i" in result.stdout, \
"commit-3 formatter.py should have the 'if i' fixup absorbed"
E AssertionError: commit-3 formatter.py should have the 'if i' fixup absorbed
E assert 'if i' in 'def format_output(items):\n return ", ".join(items)\n'
E + where 'def format_output(items):\n return ", ".join(items)\n' = CompletedProcess(args=['jj', 'file', 'show', 'formatter.py', '-r', 'commit-3'], returncode=0, stdout='def format_output(items):\n return ", ".join(items)\n', stderr='').stdout
/tests/test_outputs.py:31: AssertionError
_____________________ test_commit_5_has_none_check_runner ______________________
def test_commit_5_has_none_check_runner():
result = jj("file", "show", "runner.py", "-r", "commit-5")
assert result.returncode == 0
> assert "None" in result.stdout, \
"commit-5 runner.py should have the None check fixup absorbed"
E AssertionError: commit-5 runner.py should have the None check fixup absorbed
E assert 'None' in 'def run(input_data):\n return input_data.strip()\n'
E + where 'def run(input_data):\n return input_data.strip()\n' = CompletedProcess(args=['jj', 'file', 'show', 'runner.py', '-r', 'commit-5'], returncode=0, stdout='def run(input_data):\n return input_data.strip()\n', stderr='').stdout
/tests/test_outputs.py:38: AssertionError
__________________________ test_working_copy_is_clean __________________________
def test_working_copy_is_clean():
result = jj("diff", "-r", "@")
assert result.returncode == 0
> assert result.stdout.strip() == "", \
"Working copy should be empty after absorb"
E AssertionError: Working copy should be empty after absorb
E assert 'Modified reg..._data.strip()' == ''
E
E + Modified regular file formatter.py:
E + 1 1: def format_output(items):
E + 2 2: return ", ".join(str(i) for i in items if i)
E + Modified regular file parser.py:
E + 1 1: def parse(data):
E + 2 2: return [item.strip() for item in data.split(",")]...
E
E ...Full output truncated (5 lines hidden), use '-vv' to show
/tests/test_outputs.py:45: AssertionError
__________________________ test_absorb_report_exists ___________________________
def test_absorb_report_exists():
report_path = "/home/user/absorb_report.md"
> assert os.path.isfile(report_path), \
"Absorb report should exist at /home/user/absorb_report.md"
E AssertionError: Absorb report should exist at /home/user/absorb_report.md
E assert False
E + where False = <function isfile at 0x7537194b4220>('/home/user/absorb_report.md')
E + where <function isfile at 0x7537194b4220> = <module 'posixpath' (frozen)>.isfile
E + where <module 'posixpath' (frozen)> = os.path
/tests/test_outputs.py:64: AssertionError
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED ../../../tests/test_outputs.py::test_commit_2_unchanged
PASSED ../../../tests/test_outputs.py::test_commit_4_unchanged
FAILED ../../../tests/test_outputs.py::test_commit_1_has_strip_parser - Asser...
FAILED ../../../tests/test_outputs.py::test_commit_3_has_improved_formatter
FAILED ../../../tests/test_outputs.py::test_commit_5_has_none_check_runner - ...
FAILED ../../../tests/test_outputs.py::test_working_copy_is_clean - Assertion...
FAILED ../../../tests/test_outputs.py::test_absorb_report_exists - AssertionE...
========================= 5 failed, 2 passed in 0.19s ==========================