Skip to content

Review fork maintenance design: upstream ancestry, integration gates, and failure isolation #86

Description

@marksverdhei

Problem

The fork's history and maintenance workflows make upstream integration, review, and regression isolation harder than necessary. This issue records the findings from the September 5 repository-history review; proposed remedies are in a separate comment.

1. Squashed upstream ancestry conflicts with the sync strategy

The initial public release explicitly squashed the inherited history. In the non-shallow local checkout, git merge-base origin/clanker origin/main returns no common ancestor.

Nevertheless, the fork-sync configuration schedules upstream integration through a shared workflow. The reviewed shared workflow runs git rebase and then force-pushes the shared fork branch on success, with no intervening build/test gate. It creates backups, but those do not validate compatibility or prevent disruption to open branches. The caller also follows the mutable @main workflow reference.

Without shared ancestry, ordinary rebase cannot identify the original fork delta cleanly. Existing issue #16 reports widespread add/add conflicts, consistent with this mismatch. This issue complements that incident with the underlying design problem; it does not establish that every subsequent sync failure has the same cause.

2. Maintenance changes have bundled unrelated, consequential behavior

PR #46, titled dependency-refresh stabilization, changed 84 files (2,877 insertions and 1,293 deletions), including substantial Windows sandbox token, desktop-access, and process-launch behavior alongside dependencies, CI, and test repairs. This is a reviewability and rollback concern, not a claim that those sandbox changes are incorrect. The aggregate change makes it harder to validate or revert one decision independently.

3. One character collision blocks unrelated lookups

Introduced in #30, CharacterCatalog::resolve returns all catalog collision errors before considering the requested name. One conflicting package therefore prevents resolution of otherwise unambiguous characters. The remaining avatar stack (#83/#82) illustrates the impact: lazy materialization can create a collision with a preexisting custom alias and subsequently break startup.

4. Routine CI depends on unavailable historical workflow artifacts

repo-checks.yml stages an npm package using artifacts from one pinned upstream Actions run. The baseline build-test job fails with no valid artifacts found to download. An ordinary PR gate thus depends on the continued availability of external workflow artifacts, independently of the PR's code.

5. The merge workflow did not enforce the intended wait for CI

During this session, #84 merged immediately after gh pr merge --auto --rebase, while CI was unfinished. The executing agent should have checked effective merge-gate behavior first. This is an observed process failure; the exact protection/ruleset configuration still needs inspection before attributing it to a particular setting.

Impact

These choices increase upstream-sync friction, weaken confidence in merge readiness, enlarge regression blast radius, and complicate diagnosis and rollback. The primary concern is the ancestry/sync mismatch; the other findings should be addressed in separate, reviewable implementation changes.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions