Skip to content

v1.2.0 push line claims unsent records when no notes ref exists (regression from #656) #865

Description

@MongLong0214

Follow-up to #632, on the wording that #656 (aafd5ab) introduced. Field use of v1.2.0 on MongLong0214/logic-pro-mcp.

#632 asked one question directly: "Is there a local note waiting?" The new line answers it unconditionally with yes, without checking. When the answer is no, the line reports data that does not exist as unsent.

What happened

$ git push --force-with-lease=... origin HEAD:docs/adr009-popup-measured
commitlore: notes mirror (origin) failed: the 2s this hook waits for the remote ran out.
The branch was pushed; the records for these commits are still only local. The next push
retries this automatically, or run "commitlore sync" to send them now.
 + 9761c86d...4bd280dc HEAD -> docs/adr009-popup-measured (forced update)

So I ran what it named:

$ commitlore sync
origin       nothing-to-do  no notes mirror on either side
pr270-fork   nothing-to-do  no notes mirror on either side
pr54-fork    nothing-to-do  no notes mirror on either side

There is nothing to send. Checked three ways, all agreeing:

$ git for-each-ref refs/notes/          # (empty — no notes ref exists at all)
$ git notes --ref=commitlore show 4bd280dc   # (empty)
$ git log -1 --format='%B' 4bd280dc | grep -iE '^[A-Za-z-]+:'   # (no trailers)

"the records for these commits are still only local" is false: there are no records for these commits, in any location.

Why this is worse than what #632 reported

The v0.8.2 line was spawnSync git ETIMEDOUT; branch push continues — vague, but it only claimed a timeout. The v1.2.0 line is specific and asserts a fact about my repository's contents that it did not measure. I acted on it (ran sync, then went looking for the hook), which is the cost #632 was filed to remove.

The timeout is on reaching the remote. Whether local notes exist is a purely local question — git for-each-ref refs/notes/ — and does not depend on the remote answering. The message can be accurate at zero network cost.

Suggestion

Branch on the local check, which cannot time out:

  • no local notes ref → "Could not reach the remote to check the notes mirror. Nothing is waiting locally, so nothing was lost."
  • local notes present → the current sentence, which would then be true.

Second, smaller thing

commitlore sync iterates every remote and lets a plain git failure through for an unreachable one:

$ commitlore sync
fatal: repository 'https://github.com/narukijima/logic-pro-mcp.git/' not found
origin       nothing-to-do  no notes mirror on either side

That remote is a deleted fork, so failing is correct; surfacing it as a bare fatal: above the table reads as though sync itself failed. A row in the table (fork unreachable remote not found) would keep the report in one shape.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions