trace: a commit made in the same Bash call as the edit loses the session trailer and attestation

Đang mở
#3,625 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@waveywaves đang làm issue này rồi.

Từ ngày 15/10/2026.

  • #3631 của @waveywaves — đang mở

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
15/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
bash, git, go

Hướng nghiên cứu

Start with HandleCommitMsgHook, which matches staged files against the AI line attributions, and with the PreToolUse and PostToolUse hooks for Bash that record those attributions. The race is that the commit-msg hook runs before PostToolUse writes the attribution, so check the .git/chainloop-trace/commits/<sha>.json output for a missing session_ids. Open pull request #3631 already targets this, so review it before starting. Done means a commit made in the same Bash call carries the session trailer, or pre-push warns when a session's changes are not in any pushed commit.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug component/CLI trace-provider

What happens

When Claude Code changes a file and commits it in the same Bash tool call, the commit gets no Chainloop-Trace-Sessions trailer. The pre-push hook then finds no traced commit, and the push gives no AI coding session attestation. The session is lost without any message.

Example of a single Bash call that loses the session:

echo "change" >> README.md && git add README.md && git commit -m "..." && git push origin my-branch

Why

Trace records the lines that a Bash call changed in the PostToolUse hook, so only after the whole call ends. The git hooks run while the call is still running:

  1. commit-msg runs. HandleCommitMsgHook matches the staged files against the AI line attributions, but the attribution for this call does not exist yet. No trailer.
  2. pre-push runs and sees no traced commit. No attestation.
  3. The Bash call ends, and PostToolUse records the attribution for the session. It is too late for this commit.

In the run where we saw this, the commit time was 17:02:07 and the attribution recorded_at was 17:02:08. The record in .git/chainloop-trace/commits/<sha>.json has no session_ids, and the attribution stays pending.

An edit with the Edit or Write tool, followed by a separate Bash commit, works as expected, because PostToolUse of the edit runs before the commit.

Expected

A commit made inside a Bash tool call carries the session trailer when the same call changed the committed files, and the push gives an attestation.

Ideas

  • In PreToolUse for Bash, mark the session as having a Bash call in progress. commit-msg could then compare the staged files with the PreToolUse snapshot and attribute the changes to that session.
  • At minimum, have pre-push warn when a session recorded changes that no pushed commit carries, so the loss is visible.

Environment

Chainloop CLI 1.122.0, Claude Code in a Docker Sandbox (sbx v0.47, clone mode). The behavior does not depend on the sandbox.

Ngôn ngữ chính
Go
Star
582
Fork
61
Merge trung bình
12 giờ 47 phút
Pull request đã merge (30 ngày)
137

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của chainloop-dev/chainloop

Tất cả issue của chainloop-dev/chainloop

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.