Skip to content

porch: a completed project's status.yaml on main never records its own merge (post-merge stamp orphans by construction) #1446

Description

@amrmelsayed

Every lane's final porch write is a chore(porch): <id> PR #<n> merged commit that touches only codev/projects/<id>-<slug>/status.yaml. Because it necessarily happens after the PR merges, it lands on a branch that is already merged and is then deleted at cleanup — so it can never reach main. Observed independently on pir-1191 and pir-1410; by construction it applies to every completed lane.

Effect on main's record. The shipped copy of a completed project is frozen one step short of done. For 1191 (merged, issue closed, protocol verified) main carries:

phase: verified
build_complete: false
pr_history:
  - { phase: review, pr_number: 1427, branch: builder/pir-1191, created_at: ... }   # created, never merged
pr_ready_for_human: false

Sampling completed projects on main, 12 of the first 40 with a pr_number show build_complete: false. So anyone reading project history from main — a person, a future dashboard, or an audit script — sees a repo full of lanes that appear to have stalled at 'PR opened'.

The question to settle is which of two things codev/projects/*/status.yaml is:

  1. Ephemeral orchestration state — in which case shipping it to main at all is arguably noise, and the durable record is the PR + issue + review artifact (already true today).
  2. Part of the shipped project record — in which case the merge outcome belongs in it, and the final stamp needs to land somewhere reachable: write the merge record before merging (the PR carries it), or have the merge step amend it on main, or drop the fields that can never be accurate post-merge.

Not urgent and nothing is lost today (the PR and issue are the real record), but the current shape quietly publishes a wrong answer, and it is cheap to make honest either way. Surfaced by the streamdeck architect during pir-1410 cleanup; filed here as porch's own design call.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/porchArea: Porch state machine / protocol orchestration

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions