Skip to content

pr-merge mod lifecycle has no automated test coverage (FO-dogfood-only) #253

@clkao

Description

@clkao

Gap

The pr-merge merge-hook mod (open a code-branch PR to next, record pr:, block until merge, two-step terminalize) is not exercised by any automated test — live or offline. Its only verification is FO dogfooding: every entity merge this session drove it by hand.

What live testing actually covers

internal/ensigncycle/live_test.goTestLiveEnsignCycle (run by the claude-live job in runtime-live-e2e.yml, behind the CI-E2E approval gate) drives a real model through spacedock claude to take a single flat-entity backlog → done, then asserts the mechanical cycle outputs (stage-report heading, - DONE: marker, ### Summary, no checkbox bullets, one path-scoped commit naming only the entity).

The fixture is non-worktree, non-split-root, no _mods/, no gh (readmeNonWorktree() + one entity). None of the pr-merge preconditions exist, so the PR lifecycle (rebase → push branch → gh pr create → set pr: → block → merge-detect → two-step terminalize) never runs.

What IS tested

Only the guard mechanism (offline unit tests): internal/status/archive_guard_test.go (+ the mods-definition-dir-location tests) assert that a terminal --set/--archive is refused when a merge hook is registered and pr/mod-block are empty. Plus a static surface-grep in skills/integration/skill_surface_test.go. Neither drives the mod's behavior.

Why it's hard

The mod is FO-executed markdown, not Go code, so it can't be unit-tested. An honest live test needs a real gh PR round-trip against a throwaway repo (mocking gh would violate the no-mocks-in-e2e rule).

Options

  1. A gated live pr-mod round-trip test (throwaway repo + real gh), as a sibling to TestLiveEnsignCycle behind the CI-E2E gate.
  2. An honest coverage-matrix entry marking the pr-merge lifecycle as FO-dogfood-only (no automated coverage), so the gap is tracked rather than silently assumed-covered.

Natural row for the behavior coverage matrix (the skeleton-and-matrix work). Off the immediate critical path; filed for tracking, not dispatched.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions