Skip to content

Close: Full run and merge for the approval-hold epic #497

Closed

Description

@barelyworkingcode

Child of #495. The close child. Approved with #495.

User story

As the owner, I want the approval-hold epic merged only after its full checks pass, so that main never holds half of it.

Acceptance criteria

  • CI is green on the final commit of epic/495-approval-hold, with a dispatched ci run on that head.
  • eve's devbox/verify-full passes on both epic heads built together.
  • Every other child is merged to its epic branch with review and evidence lines.
  • main is merged into epic/495-approval-hold by the sync PR sync/495-main, which says Closes #497.
  • merge-check passes on each epic-to-main PR.
  • relay's epic PR merges first, and eve's epic PR merges minutes later.
  • No step re-pins eve to relay main.
  • Each child and both parents are closed with a comment naming the merged PR.
  • The epic branches are deleted.

What I'd notice

Nothing. The change appears on main in one step.

Close lines (eve)

  1. CI green on the final commit of epic/495-approval-hold, and a full run: dispatch ci (workflow_dispatch) on the epic head, after line 4.
  2. The Full run passes on the epic head after line 4 and before the epic PR merges: joint close task step b on Hold a tool approval while no screen shows the session #495.
  3. Every child is merged to the epic branch, with review and evidence lines in place.
  4. main is merged into the epic branch by a sync PR whose head is sync/495-main and whose body says Closes #497; conflicts are resolved on it.

Lines 5 to 7 run under the joint close task on #495 (steps c and d).

Tasks

Contract

Joint close task and order: #495. This child adds no code. Its PRs are the sync PR, a possible pin-only PR, and eve's epic PR to main (which says Closes #497). merge-check judges the sync PR and the epic PR on the files that differ from main, so this list is the union of #496's paths; conflict resolution stays inside them.

File ownership

  • public/modal-manager.js
  • public/app.js
  • relay-client.js
  • test/e2e/relay-pin.json (the pin-only PR, if needed)
  • test/e2e/g8-approval-wait.spec.js
  • docs/FEATURES.md
  • docs/api.md
  • docs/areas.jsonc

Test surface

The dispatched ci run (every spec, not the diff's selection), and the joint run in step b (every journey on both heads built together). A conflict resolved on sync/495-main gets the specs of the area it touches in that run. Nothing new is written here.

Waits

  • ci: the dispatched run's id, waited on with gh run watch <id> --exit-status (a completion handle), never a duration.
  • Step b: the set.js process exit and the devbox/verify-full status it posts. It holds the browser-test lock; don't hand-roll a wait for it.
  • Merges: merge-check exit codes.

Budget

0 lines of new code. Conflict resolution only inside the paths above; anything else stops and asks.

Decisions made for the owner

  • Contract amendment (coordinator, 2026-10-15): the pin PR chore/496-relay-pin also updates two specs, because the new pin changes what they see. The patch rule's "pin-only" can't hold when the pinned fakerelay's behaviour moves under existing specs, and neither change can land red on its own.

    • test/e2e/g1-today-needs.spec.js: the held-run world has a pending approval; with relay's replay on join, opening that thread now shows its prompt (this epic's approved behaviour), which the spec must answer before it closes the tab.
    • test/e2e/g16-add-browser.spec.js: relay#425/merge-check accepts an epic branch as a child base #437 (merged on relay main, in the epic head) changed fakerelay's eve-passkey texts to "Home|Work"; relay#437's PR names "the next eve relay pin bump" as the one that updates g16.
  • Contract amendment 2 (coordinator, 2026-10-15), replacing the g1-today-needs approach above: relay#445 adds a fakerelay hold reply kind (a turn that runs until stopped, no prompt). The held-run spec worlds swap permission for hold, every assertion kept. The pin PR also owns test/e2e/g5-routines-page.spec.js, test/e2e/g5-schedule.spec.js, test/e2e/g6-board.spec.js, test/e2e/g6-routines.spec.js and docs/test.md (the reply-kind list), and the pin names relay's epic head after relay#445 merges.

Decisions made for the owner

Activity

  1. barelyworkingcode commented on Oct 15, 2026

    @barelyworkingcode
    OwnerAuthor

    Approval inherited from #495, which the owner approved as a cross-repo epic and then split on 2026-10-15. This child is one of that epic's own listed batches and stores or moves no credential, so it needs no separate approval (rules step 2).

  2. barelyworkingcode commented on Oct 16, 2026

    @barelyworkingcode
    OwnerAuthor

    Coordinator approval: a listed child of the approved epic #495 (relay side #422); the owner approved the epic and said to take it through to main on 2026-10-15. It inherits that approval (step 2).

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

    enhancementNew feature or requesttaskOne batch of an epic

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions