Skip to content

feat(auxiliary): add primary repository auxiliary groups#71

Merged
nettee merged 25 commits into
mainfrom
auxiliary-repo
Jun 13, 2026
Merged

feat(auxiliary): add primary repository auxiliary groups#71
nettee merged 25 commits into
mainfrom
auxiliary-repo

Conversation

@nettee

@nettee nettee commented Jun 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • add Auxiliary Group config/state support under .wtk/config.toml and .wtk/worktrees.json
  • add wtk auxiliary-group add / wtk ag add and wtk new --ag coordinated worktree creation
  • make status/list/remove auxiliary-aware and remove legacy Workspace Mode entrypoints/artifacts

Verification

  • cargo check
  • cargo test
  • uv run pytest e2e/test_auxiliary_group.py
  • uv run pytest e2e/test_cli_errors.py e2e/test_repo_mode.py
  • uv run pytest e2e/test_pnpm.py
  • uv run pytest e2e

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 16c3edffad

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs Outdated
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete72d38e9

  • ✅ Review comment on src/worktree.rs (@chatgpt-codex-connector) — thread
    • In src/worktree.rs, coordinated primary rows are now rebuilt with list::repository_row_with_options(..., true, ...) so generated refs/* symlinks no longer set the dirty boolean or dirty label. I also added a regression assertion in e2e/test_auxiliary_group.py covering the JSON list output.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 72d38e9def

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs Outdated
Comment thread src/auxiliary.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round completed8b7211

  • ✅ Review comment on src/worktree.rs (@chatgpt-codex-connector) — thread
    • Updated src/worktree.rs so coordinated removal checks git status --untracked-files=all and ignores only the recorded generated refs/ entries. Added an e2e regression in e2e/test_auxiliary_group.py proving real user files under refs/ now block removal.
  • ✅ Review comment on src/auxiliary.rs:308 (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs and src/worktree.rs so auxiliary ref validation re-resolves each auxiliary worktree and requires it to still be on entry.branch, and wtk list now reports that drift as broken. Added an e2e regression covering a switched auxiliary branch.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d8b7211b45

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs
Comment thread src/list.rs Outdated
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round completed38044d

  • ✅ Review comment on src/worktree.rs:464 (@chatgpt-codex-connector) — thread
    • Added a coordinated primary-branch guard before auxiliary removal in src/worktree.rs, backed by a shared validator in src/auxiliary.rs and an e2e regression that fails removal after switching the primary worktree to another branch.
  • ✅ Review comment on src/list.rs (@chatgpt-codex-connector) — thread
    • Updated list dirty-state handling to ignore only the recorded generated auxiliary ref paths, using porcelain output with all untracked entries, and added an e2e regression showing refs/notes.txt still marks the coordinated worktree dirty.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d38044dc79

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round completeda228bb

  • ✅ Review comment on src/worktree.rs:355 (@chatgpt-codex-connector) — thread
    • Updated src/worktree.rs so coordinated wtk status validates the primary worktree's current branch with the shared branch guard before emitting status, and added an e2e regression in e2e/test_auxiliary_group.py that fails after switching the primary worktree to another branch.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: da228bbaf6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete1672b4b

  • ✅ Review comment on src/worktree.rs:480 (@chatgpt-codex-connector) — thread
    • Updated src/worktree.rs to preflight every auxiliary worktree for removability and fail fast if any auxiliary is locked before coordinated removal starts. Added an e2e regression in e2e/test_auxiliary_group.py proving a later locked auxiliary no longer causes partial coordinated deletion.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1672b4b259

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs Outdated
Comment thread src/auxiliary.rs Outdated
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete02c15e8

  • ✅ Review comment on src/auxiliary.rs (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs so write_ref now fails fast if refs/ already exists instead of removing it, and added an e2e regression in e2e/test_auxiliary_group.py proving tracked refs/api content is preserved.
  • ✅ Review comment on src/auxiliary.rs (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs to parse and decode quoted porcelain v1 paths before comparing ignored generated refs, and added an e2e regression in e2e/test_auxiliary_group.py covering an auxiliary repository basename with whitespace.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 02c15e851e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f8e3e759a9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/worktree.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round completef110cb2

  • ✅ Review comment on src/worktree.rs:265 (@chatgpt-codex-connector) — thread
    • I updated coordinated creation to install per-worktree exclude entries for each generated refs/ symlink in src/auxiliary.rs and call that from src/worktree.rs. I also added an e2e regression in e2e/test_auxiliary_group.py that verifies native git status stays clean and git add . does not stage those refs.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f110cb299c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs Outdated
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete4aa3732

  • ✅ Review comment on src/auxiliary.rs (@chatgpt-codex-connector) — thread
    • Replaced the shared info/exclude write in src/auxiliary.rs with a worktree-local excludes file under the linked worktree gitdir, configured through worktree-local Git config. Extended e2e/test_auxiliary_group.py to verify a real refs/api file in the main worktree remains visible during and after coordinated worktree removal.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4aa3732963

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs
Comment thread src/auxiliary.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete1a05974

  • ✅ Review comment on src/auxiliary.rs:475 (@chatgpt-codex-connector) — thread
    • I now escape generated refs/ ignore entries before writing them in src/auxiliary.rs, so auxiliary names like a* are treated literally. I also added an e2e regression in e2e/test_auxiliary_group.py that proves real paths like refs/actual stay visible and block dirty removal.
  • ✅ Review comment on src/auxiliary.rs:498 (@chatgpt-codex-connector) — thread
    • I updated src/auxiliary.rs to preserve any inherited core.excludesFile content by merging it into the generated worktree-local exclude file before configuring the coordinated worktree. I added an e2e regression in e2e/test_auxiliary_group.py showing .DS_Store remains ignored in the coordinated worktree.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a05974d53

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete0cc07ad

  • ✅ Review comment on src/auxiliary.rs:498 (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs so inherited_excludes_path falls back to Git's implicit global ignore path ($XDG_CONFIG_HOME/git/ignore or $HOME/.config/git/ignore) when core.excludesFile is unset, and added an e2e regression in e2e/test_auxiliary_group.py covering the implicit HOME-based ignore file.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0cc07ad444

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs Outdated
nettee added 2 commits June 13, 2026 13:45
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete5d16b1b

  • ✅ Review comment on src/auxiliary.rs (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs so install_ref_excludes only merges an inherited core.excludesFile when that file exists, matching Git's behavior for a missing configured excludes path. Added test_auxiliary_group_new_skips_missing_global_excludes in e2e/test_auxiliary_group.py to cover wtk new --ag with a missing global excludes file.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

Generated-By: looper 0.9.8 (runner=fixer, agent=codex)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8a9c64deca

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs Outdated
Comment thread src/worktree.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round complete1dc0890

  • ✅ Review comment on src/auxiliary.rs (@chatgpt-codex-connector) — thread
    • Updated src/auxiliary.rs so escape_gitignore_pattern counts trailing spaces once, escapes the non-space prefix, and appends escaped trailing spaces without looping. Added a unit regression covering one and two trailing spaces.
  • ✅ Review comment on src/worktree.rs:195 (@chatgpt-codex-connector) — thread
    • Updated src/worktree.rs to reject --base together with --from-current before coordinated branch resolution, matching standalone wtk new behavior. Added an e2e regression in e2e/test_auxiliary_group.py for the coordinated conflict case.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1dc0890432

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auxiliary.rs
Generated-By: looper 0.9.8 (runner=fixer, agent=codex)
@nettee

nettee commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

Looper fixer round completef8fbc8b

  • ✅ Review comment on src/auxiliary.rs:461 (@chatgpt-codex-connector) — thread
    • Resolved relative inherited core.excludesFile paths against the coordinated primary worktree in src/auxiliary.rs before the existence/read checks. Added an e2e regression in e2e/test_auxiliary_group.py that runs wtk new --ag from a nested subdirectory and confirms inherited ignore rules still apply.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@nettee nettee merged commit ab828c3 into main Jun 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve workspace spec persistence by using refs to a helper repo under the main repo

1 participant