feat: register fork-main integration divergence - #14
Merged
Merged
Conversation
Canonical divergence topic for the fork-main integration workflow the personal fork carries beyond official upstream: the guarded remote topology and migration, the isolated fork-target validation clone, the divergence manifest and its health report, the topic integrate and discard helpers, the upstream merge helper, the startup upstream probe, and the supporting brief, seed, self-update and documentation surfaces. Submitted upstream as PR 1944 and retired when that lands.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
Register the first carried fork divergence in the fork divergence ledger: the permanent fork-main integration workflow, submitted upstream as pull request 1944 and still open there. This is the retroactive bookkeeping the ledger was built for - the fork has carried this workflow since before the ledger existed, and until now no manifest unit described it. IMPORTANT DELIVERY REQUIREMENT: merge with the REGULAR merge method, never squash and never rebase. The two-parent merge IS the deliverable: bin/fm-fork-status.sh requires every manifest unit to have a reachable branch-level integration merge whose second parent is an ancestor of its canonical topic, so squashing or rebasing this pull request would destroy the very link that makes the registration valid and would leave the fork unhealthy. PRECISE CHANGE SET, stated this way deliberately because a vaguer wording previously caused an acceptance-criterion conflict across two gates: the first-parent diff changes exactly ONE file, fork-divergences.json, adding the manifest entry for id fork-main-integration with class pending, its canonical topic, its open upstream pull-request record, its falsifiable retirement condition, and the 33 exact paths its patch touches. There is deliberately NO product-content change: the canonical topic reproduces work already present on fork main, so the integration merge records ownership and provenance rather than altering code. An acceptance criterion must expect a manifest-only diff plus a two-parent merge commit. The canonical topic is one aggregate non-merge commit based on current official upstream, and git cherry against upstream reports exactly one non-equivalent commit, which is the invariant that makes upstream squash or rebase equivalence measurable later. The topic deliberately excludes the governance manifest itself, excludes the supervision guard fix that will be registered as its own separate unit, and excludes integration-path documentation artifacts that earlier pipeline runs committed, so the unit's patch matches its stated intent exactly. Follow the fork-main-integration procedure: isolated candidate from the private fork integration clone, validation through the isolated fork-target registration, no force-push, and no rewriting of published history.
What Changed
fork-main-integrationas a pending divergence with its canonical topic, open upstream PR feat(fork): add permanent fork-main integration kunchenguid/firstmate#1944, and retirement condition.Risk Assessment
🚨 High: The source diff and topic shape are correct, but merging without the canonical branch would immediately make the registered divergence unhealthy and inoperable.
Testing
Inspected the base/target and first-parent diffs, asserted the required merge and canonical-topic invariants, matched all 33 declared paths to the actual topic patch, verified upstream PR 1944 remains open, and exercised the production fork-status CLI end-to-end with zero structural errors. The reviewer-visible transcript was preserved and testing left the worktree clean; the eventual outer PR merge remains outside this test phase and must use the regular merge method.
Evidence: End-to-end registration evidence
PR 1944 open; two-parent integration merge; manifest-only first-parent diff; exactly one canonical topic commit; declared and actual paths match 33/33; fork status reports errors=0.Evidence: Upstream PR 1944
Source: Upstream PR 1944
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
fork-divergences.json:66- The requirement says “The canonical topic is one aggregate non-merge commit based on current official upstream,” and this entry namesfm/divergence/fork-main-integration, but the fork publishes no such branch (git ls-remote --heads origin refs/heads/fm/divergence/fork-main-integrationreturned nothing). Although commit06925cfis reachable as the merge's second parent,fm_fork_topic_refresolves only a published or local canonical branch, so normal clones will report the unit missing and cannot validate or discard it. Before the captain merges, publish exactly06925cfunder that branch with a non-forced push, or provide evidence that the production fork exposes the canonical ref.✅ **Test** - passed
✅ No issues found.
git show -s --format='commit=%H%nparents=%P%nsubject=%s' c4f48b2b1559b5ce77e56e574dec2fd6e134df7dgit diff --name-only c4f48b2b1559b5ce77e56e574dec2fd6e134df7d^1 c4f48b2b1559b5ce77e56e574dec2fd6e134df7dTargeted Git/JQ assertions for two-parent topology, canonical topic ancestry, absence of topic merges, and exact 33-path manifest coveragegit cherry 64d61aed84373e02b1a28c4e6b262908ed8128d5 06925cf8b67e33cd576e830b7724b0c60943c40eGIT_DIR=<isolated-fixture>/repo.git GIT_WORK_TREE=$PWD FM_FORK_TOPOLOGY_VALIDATED_REPO=$PWD bin/fm-fork-status.sh --repo "$PWD" --fork-ref refs/heads/target --upstream-ref refs/heads/upstream --facts-onlygh-axi pr view 1944 --repo kunchenguid/firstmate --json state,url,mergedAt,headRefName,titleFinal evidence-integrity, clean-worktree, and transient-fixture cleanup verification✅ **Document** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.