Skip to content

Make Mergecraft's publisher survive a moving base and keep PR text receipts current #286

Open

Description

@nisavid

Problem

The arch-pkgs resurrection orchestrator reported two failures on 2026-09-29 (routed through #256):

  • Creation under a moving base. The base branch moved between preflight and create_reviewable_pr.py. The helper created the draft PR, then exited with "created PR does not have the exact nonce-tagged transport state". Recovery through a text update leaves no creation receipt, so readiness has to fall back to the numbered manifest.
  • Stale text after pushes. After later pushes, the PR body's change navigation went stale, and an unreceipted body edit went unnoticed until the next text update.

Scope

plugins/mergecraft/skills/publishing-reviewable-prs/: the create and update helpers and the audit. Decide whether a created but unconfirmed PR can be adopted with a creation receipt, and how the audit detects stale navigation and unreceipted edits.

Sequencing

Under decision 1 on #256, a fix that touches files pinned by the Mergecraft relation evidence lands after #210 and joins the shared post-reset refresh with #194, #195, and #182, which also change publishing-reviewable-prs/SKILL.md. This ticket is blocked by #210.

Done when

Both failure paths have regression tests, the publisher recovers the first case with a creation receipt, the audit flags the second, and the Mergecraft validators pass.

Activity

  1. nisavid commented on Sep 29, 2026

    @nisavid
    OwnerAuthor

    Evidence from nisavid/arch-pkgs, 2026-09-26 and 27.

    3a. Creation while the base moved. The PR is nisavid/arch-pkgs#115.

    • The delegate checked origin/main at 7aeab8b. Before create_reviewable_pr.py finished, main moved to 9c4c5b2: docs(utilyze): point the READMEs at the utilyze lane issue (#84) arch-pkgs#111 squash-merged at 2026-09-27T00:45:17Z, touching only packages/utilyze.
    • The helper created draft fix(versionkeeping): reject HTTPS profile drift before credential use #115 with its placeholder body, then exited 1: created PR does not have the exact nonce-tagged transport state. It neither retried nor rolled back.
    • It could not resume: the nonce is random, and a second run refuses because an open PR already exists for the branch.
    • Recovery was a body-only update_reviewable_pr.py text, with a manifest bound to base 9c4c5b2, installing the body the template would have rendered. The merge base, and so the Diff numbers, were unchanged.
    • Result: the first receipt is a text-update receipt (sequence 1, canonical, not-required), and there is no creation receipt. Readiness must now use the numbered manifest; the token manifest can't be used.

    3b. Stale PR text and an unreceipted edit. The PR is nisavid/arch-pkgs#94.

    • Its latest receipt was sequence 14, at head 5e0ae2e. The head had since moved 13 commits, to fe43f42.
    • The body's change navigation still described 5e0ae2e: 10 files and IMPL +5108, where the real figures were 13 files and IMPL +5934.
    • The body had also been edited at 2026-09-26T09:42:34Z with no receipt in the canonical store.
    • The pre-update audit returned drift ("latest receipt belongs to an older PR identity epoch").
    • Nothing flagged the stale navigation until a later bullet-only text update tried to publish. The validator then failed all four Diff checks, and the update had to widen to regenerate the navigation. That was receipt 15.

    Related ergonomics. Two delegates first ran the publisher helpers from the wrong directory. They failed at validation before any write, because the helpers validate against the current directory's repository, which must be the checkout at the PR head.

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