split_squash_upstream_prep__8EmPKLD

Status: Failed
Started: 3/19 16:10
Execution: 38.3s
Test: 11.2s
2026-03-19 08:19:22.367	DEBUG	native:1	Pochi	pochi v0.6.1
2026-03-19 08:19:22.372	DEBUG	native:7	PochiConfigManager	add workspace config: /root/.pochi/config.jsonc
2026-03-19 08:19:22.594	DEBUG	/$bunfs/pochi:503183	loadAgents	Loaded 5 custom agents (5 valid, 0 invalid)
2026-03-19 08:19:22.595	DEBUG	/$bunfs/pochi:503184	loadSkills	Loaded 2 skills (2 valid, 0 invalid)
2026-03-19 08:19:22.736	DEBUG	/$bunfs/pochi:439420	PochiVendor	JWT is expiring or missing, fetching a new one
2026-03-19 08:19:24.344	DEBUG	/$bunfs/pochi:415701	MCPHub	MCP servers configuration changed via signal:
2026-03-19 08:19:24.345	DEBUG	/$bunfs/pochi:415813	MCPHub	Build MCPHub Status
2026-03-19 08:19:24.528	DEBUG	/$bunfs/pochi:502609	TaskRunner	Starting TaskRunner...
2026-03-19 08:19:24.541	DEBUG	/$bunfs/pochi:454339	listFiles	Listing workspace files from /root with maxItems 500
2026-03-19 08:19:24.730	DEBUG	/$bunfs/pochi:496641	generateTaskTitle	Generating task title, old: null, new: ## Task: Prepare a Clean Upstream Submission by Splitting and Squashing Commits
2026-03-19 08:19:57.656	DEBUG	/$bunfs/pochi:503269	TaskRunner	Failed:

 TypeError  undefined is not an object (evaluating 'getErrorTrace(error40).map'), 417706, 47, 417706, 47, /$bunfs/root/pochi
error stack:
  • pochi	prettyFormatErrorObj
	/$bunfs/pochi:417706
  • pochi	<anonymous>
	/$bunfs/pochi:417701
  • native	reduce
	native:1
  • pochi	log
	/$bunfs/pochi:417840
  • pochi	onError
	/$bunfs/pochi:500813
  • pochi	makeRequest
	/$bunfs/pochi:432009
  • pochi	async <anonymous>
	/$bunfs/pochi:431766
  • pochi	async step
	/$bunfs/pochi:502738
  • pochi	async run
	/$bunfs/pochi:502615
  • pochi	async <anonymous>
	/$bunfs/pochi:503269
  • native	processTicksAndRejections
	native:7
undefined is not an object (evaluating 'getErrorTrace(error40).map')
Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version (7.81.0-1ubuntu1.23).
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.
downloading uv 0.9.7 x86_64-unknown-linux-gnu
no checksums to verify
installing to /root/.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 9 packages in 19ms
============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-8.4.1, pluggy-1.6.0
rootdir: /tests
plugins: json-ctrf-0.3.5
collected 15 items

../tests/test_final_state.py .FFFFFFFFF.FFFF                             [100%]

=================================== FAILURES ===================================
______________________ test_commit_add_utility_fix_exists ______________________

    def test_commit_add_utility_fix_exists():
        result = run_jj(["log", "-r", 'description(substring:"add utility fix")',
                         "--no-graph", "-T", 'description ++ "\n"'])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
>       assert "add utility fix" in result.stdout, (
            f"Commit 'add utility fix' not found. stdout: {result.stdout!r}"
        )
E       AssertionError: Commit 'add utility fix' not found. stdout: ''
E       assert 'add utility fix' in ''
E        +  where '' = CompletedProcess(args=['jj', 'log', '-r', 'description(substring:"add utility fix")', '--no-graph', '-T', 'description ++ "\n"'], returncode=0, stdout='', stderr='').stdout

/tests/test_final_state.py:30: AssertionError
_____________________ test_commit_add_config_parser_exists _____________________

    def test_commit_add_config_parser_exists():
        result = run_jj(["log", "-r", 'description(substring:"add config parser")',
                         "--no-graph", "-T", 'description ++ "\n"'])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
        # Ensure we match "add config parser" but not "add config parser and update tests"
        lines = [l.strip() for l in result.stdout.splitlines() if l.strip()]
        exact_matches = [l for l in lines if l.strip() == "add config parser"]
>       assert len(exact_matches) >= 1, (
            f"Commit with exact description 'add config parser' not found. stdout: {result.stdout!r}"
        )
E       AssertionError: Commit with exact description 'add config parser' not found. stdout: 'add config parser and update tests\n\n'
E       assert 0 >= 1
E        +  where 0 = len([])

/tests/test_final_state.py:42: AssertionError
_____________________ test_commit_add_config_tests_exists ______________________

    def test_commit_add_config_tests_exists():
        result = run_jj(["log", "-r", 'description(substring:"add config tests")',
                         "--no-graph", "-T", 'description ++ "\n"'])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
>       assert "add config tests" in result.stdout, (
            f"Commit 'add config tests' not found. stdout: {result.stdout!r}"
        )
E       AssertionError: Commit 'add config tests' not found. stdout: ''
E       assert 'add config tests' in ''
E        +  where '' = CompletedProcess(args=['jj', 'log', '-r', 'description(substring:"add config tests")', '--no-graph', '-T', 'description ++ "\n"'], returncode=0, stdout='', stderr='').stdout

/tests/test_final_state.py:51: AssertionError
______________________ test_mixed_commit_no_longer_exists ______________________

    def test_mixed_commit_no_longer_exists():
        """The original mixed commit should no longer be in the visible history."""
        result = run_jj(["log", "-r", 'description(exact:"add config parser and update tests\n")',
                         "--no-graph", "-T", 'description ++ "\n"'])
        # It's okay if the command returns 0 with empty output, or returns non-zero
        # The important thing is that the description no longer appears in visible log
>       assert "add config parser and update tests" not in result.stdout, (
            f"Mixed commit 'add config parser and update tests' still visible in history: {result.stdout!r}"
        )
E       AssertionError: Mixed commit 'add config parser and update tests' still visible in history: 'add config parser and update tests\n\n'
E       assert 'add config ...update tests' not in 'add config ...te tests\n\n'
E         
E         'add config parser and update tests' is contained here:
E         Strings contain only whitespace, escaping them using repr()
E           'add config parser and update tests\n\n'

/tests/test_final_state.py:62: AssertionError
__________________________ test_linear_history_order ___________________________

    def test_linear_history_order():
        """Verify linear ancestry: initial commit -> add utility fix -> add config parser -> add config tests -> @."""
        result = run_jj(["log", "-r", "::@", "--no-graph", "-T", 'description ++ "\\n"'])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
        output = result.stdout
>       assert "add utility fix" in output, f"'add utility fix' not in ancestry of @: {output!r}"
E       AssertionError: 'add utility fix' not in ancestry of @: '\nadd config parser and update tests\n\ninitial commit\n\n\n'
E       assert 'add utility fix' in '\nadd config parser and update tests\n\ninitial commit\n\n\n'

/tests/test_final_state.py:72: AssertionError
_________________ test_add_utility_fix_modifies_only_utils_py __________________

    def test_add_utility_fix_modifies_only_utils_py():
        result = run_jj(["diff", "-r", 'description(substring:"add utility fix")', "--name-only"])
        assert result.returncode == 0, f"jj diff failed: {result.stderr}"
        files = [f.strip() for f in result.stdout.splitlines() if f.strip()]
>       assert files == ["src/utils.py"], (
            f"'add utility fix' should modify only src/utils.py, but modifies: {files}"
        )
E       AssertionError: 'add utility fix' should modify only src/utils.py, but modifies: []
E       assert [] == ['src/utils.py']
E         
E         Right contains one more item: 'src/utils.py'
E         Use -v to get more diff

/tests/test_final_state.py:100: AssertionError
________________ test_add_config_parser_modifies_only_config_py ________________

    def test_add_config_parser_modifies_only_config_py():
        # Use exact description to avoid matching "add config parser and update tests" if it still exists
        result = run_jj(["log", "-r", 'description(substring:"add config parser")',
                         "--no-graph", "-T", "change_id.short()"])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
        change_ids = [c.strip() for c in result.stdout.splitlines() if c.strip()]
        # Filter to commits that have exactly "add config parser" (not "add config parser and update tests")
        target_change_id = None
        for cid in change_ids:
            desc_result = run_jj(["log", "-r", cid, "--no-graph", "-T", 'description ++ "\n"'])
            if desc_result.returncode == 0 and desc_result.stdout.strip() == "add config parser":
                target_change_id = cid
                break
>       assert target_change_id is not None, (
            "Could not find commit with exact description 'add config parser'"
        )
E       AssertionError: Could not find commit with exact description 'add config parser'
E       assert None is not None

/tests/test_final_state.py:118: AssertionError
______________ test_add_config_tests_modifies_only_test_config_py ______________

    def test_add_config_tests_modifies_only_test_config_py():
        result = run_jj(["diff", "-r", 'description(substring:"add config tests")', "--name-only"])
        assert result.returncode == 0, f"jj diff failed: {result.stderr}"
        files = [f.strip() for f in result.stdout.splitlines() if f.strip()]
>       assert files == ["tests/test_config.py"], (
            f"'add config tests' should modify only tests/test_config.py, but modifies: {files}"
        )
E       AssertionError: 'add config tests' should modify only tests/test_config.py, but modifies: []
E       assert [] == ['tests/test_config.py']
E         
E         Right contains one more item: 'tests/test_config.py'
E         Use -v to get more diff

/tests/test_final_state.py:133: AssertionError
____________________ test_utils_py_contains_greet_function _____________________

    def test_utils_py_contains_greet_function():
        result = run_jj(["file", "show", "-r", 'description(substring:"add utility fix")',
                         "src/utils.py"])
>       assert result.returncode == 0, f"jj file show failed: {result.stderr}"
E       AssertionError: jj file show failed: Error: Revset `description(substring:"add utility fix")` didn't resolve to any revisions
E         
E       assert 1 == 0
E        +  where 1 = CompletedProcess(args=['jj', 'file', 'show', '-r', 'description(substring:"add utility fix")', 'src/utils.py'], returncode=1, stdout='', stderr='Error: Revset `description(substring:"add utility fix")` didn\'t resolve to any revisions\n').returncode

/tests/test_final_state.py:141: AssertionError
__________________ test_test_config_py_contains_test_function __________________

    def test_test_config_py_contains_test_function():
        result = run_jj(["file", "show", "-r", 'description(substring:"add config tests")',
                         "tests/test_config.py"])
>       assert result.returncode == 0, f"jj file show failed: {result.stderr}"
E       AssertionError: jj file show failed: Error: Revset `description(substring:"add config tests")` didn't resolve to any revisions
E         
E       assert 1 == 0
E        +  where 1 = CompletedProcess(args=['jj', 'file', 'show', '-r', 'description(substring:"add config tests")', 'tests/test_config.py'...de=1, stdout='', stderr='Error: Revset `description(substring:"add config tests")` didn\'t resolve to any revisions\n').returncode

/tests/test_final_state.py:162: AssertionError
_________________________ test_bookmark_feature_exists _________________________

    def test_bookmark_feature_exists():
        result = run_jj(["bookmark", "list"])
        assert result.returncode == 0, f"jj bookmark list failed: {result.stderr}"
>       assert "feature" in result.stdout, (
            f"Bookmark 'feature' not found. Output: {result.stdout!r}"
        )
E       AssertionError: Bookmark 'feature' not found. Output: ''
E       assert 'feature' in ''
E        +  where '' = CompletedProcess(args=['jj', 'bookmark', 'list'], returncode=0, stdout='', stderr='').stdout

/tests/test_final_state.py:171: AssertionError
_______________ test_bookmark_feature_points_to_add_config_tests _______________

    def test_bookmark_feature_points_to_add_config_tests():
        """Verify bookmark 'feature' points to the commit with description 'add config tests'."""
        # Get change_id of the commit that bookmark 'feature' points to
        result = run_jj(["log", "-r", "feature", "--no-graph", "-T", 'description ++ "\n"'])
>       assert result.returncode == 0, f"jj log on bookmark 'feature' failed: {result.stderr}"
E       AssertionError: jj log on bookmark 'feature' failed: Error: Revision `feature` doesn't exist
E         
E       assert 1 == 0
E        +  where 1 = CompletedProcess(args=['jj', 'log', '-r', 'feature', '--no-graph', '-T', 'description ++ "\n"'], returncode=1, stdout='', stderr="Error: Revision `feature` doesn't exist\n").returncode

/tests/test_final_state.py:180: AssertionError
_____________ test_exactly_three_non_root_non_working_copy_commits _____________

    def test_exactly_three_non_root_non_working_copy_commits():
        """The history should have exactly 4 non-root commits: initial commit + 3 clean commits."""
        # Get all commits excluding root and working copy
        result = run_jj(["log", "-r", "root()..@-", "--no-graph", "-T", 'description ++ "\n"'])
        assert result.returncode == 0, f"jj log failed: {result.stderr}"
        descriptions = [l.strip() for l in result.stdout.splitlines() if l.strip()]
>       assert len(descriptions) == 4, (
            f"Expected exactly 4 commits between root and working-copy parent "
            f"(initial commit + 3 clean commits), got {len(descriptions)}: {descriptions}"
        )
E       AssertionError: Expected exactly 4 commits between root and working-copy parent (initial commit + 3 clean commits), got 2: ['add config parser and update tests', 'initial commit']
E       assert 2 == 4
E        +  where 2 = len(['add config parser and update tests', 'initial commit'])

/tests/test_final_state.py:194: AssertionError
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED ../tests/test_final_state.py::test_working_copy_is_empty
PASSED ../tests/test_final_state.py::test_config_py_contains_parse_config_function
FAILED ../tests/test_final_state.py::test_commit_add_utility_fix_exists - Ass...
FAILED ../tests/test_final_state.py::test_commit_add_config_parser_exists - A...
FAILED ../tests/test_final_state.py::test_commit_add_config_tests_exists - As...
FAILED ../tests/test_final_state.py::test_mixed_commit_no_longer_exists - Ass...
FAILED ../tests/test_final_state.py::test_linear_history_order - AssertionErr...
FAILED ../tests/test_final_state.py::test_add_utility_fix_modifies_only_utils_py
FAILED ../tests/test_final_state.py::test_add_config_parser_modifies_only_config_py
FAILED ../tests/test_final_state.py::test_add_config_tests_modifies_only_test_config_py
FAILED ../tests/test_final_state.py::test_utils_py_contains_greet_function - ...
FAILED ../tests/test_final_state.py::test_test_config_py_contains_test_function
FAILED ../tests/test_final_state.py::test_bookmark_feature_exists - Assertion...
FAILED ../tests/test_final_state.py::test_bookmark_feature_points_to_add_config_tests
FAILED ../tests/test_final_state.py::test_exactly_three_non_root_non_working_copy_commits
========================= 13 failed, 2 passed in 0.49s =========================