Skip to content

chore(stack): remove stack tooling, scope the draft lock, align docs - #364

Merged
patroza merged 2 commits into
fork/devfrom
fork-dev/remove-stack-tooling
Aug 6, 2026
Merged

chore(stack): remove stack tooling, scope the draft lock, align docs#364
patroza merged 2 commits into
fork/devfrom
fork-dev/remove-stack-tooling

Conversation

@omegent-app

@omegent-app omegent-app Bot commented Aug 6, 2026

Copy link
Copy Markdown

Nothing drives this machinery any more. Overlays were drained and deregistered, fork/changes and
fork/integration are frozen, and upstream is now merged straight into fork/dev — a plain
git merge, because upstream is append-only and the previous sync recorded its ancestry.

Removed

Scripts fork-stack.ts, rebase-pr-stack.ts, compose-integration-overlays.ts, rebase-integration-overlays.ts, client-overlay-owner.ts + all 5 test files
Workflows compose-integration.yml, rebase-pr-stack.yml, force-update-overlay-tip.yml
Config .github/client-overlay-ownership.json
package.json fork:stack, fork:stack:sync, fork:overlay-owner, fork:rebase-overlays
Docs stack-ship-path.md, client-overlays.md

Kept, deliberately

classify-deployment-diff.sh is not stack tooling. It is the shared definition of what a diff
means, run by both fork-release and the smart-host poller so the two cannot disagree about what
ships. Its tests still pass.

managed-pr-draft-lock.yml still guards #255, #1 and #27, which remain open drafts. Merging #255
would push fork CI plumbing into the upstream mirror — that lock matters more now that nothing else
watches those branches. pr-stack.json survives purely as its allowlist, trimmed to those three PRs
and annotated to say so.

A latent bug found on the way

The draft lock read its allowlist from ?ref=fork/changes — a frozen branch. Any edit to the
manifest could never have taken effect, including the overlay deregistration in #348. It now reads
fork/dev.

Guidance rewritten, not just deleted

AGENTS.md referenced removed commands in a dozen places (pnpm fork:stack update --push,
node scripts/rebase-pr-stack.ts sync --push, …). Deleting the scripts without this would have sent
an agent to a script that no longer exists. fork-stack.md, stack-history-rewrite.md and
fork-base.md are bannered or corrected rather than deleted — the branches they describe still
exist even though the workflow around them does not.

Draft lock: no longer runs on unrelated PRs

It triggered on every pull request, started a run, looked itself up in an allowlist, exited, and
left a Keep managed PR draft check on PRs it had nothing to do with.

Now filtered to the bases the managed PRs actually target — main, fork/base, fork/tim. Ordinary
work targets fork/dev, so it does not run there at all.

Not folded into Fork CI, which was the other option. Fork CI deliberately does not watch main,
and #255 targets main — merging that pushes fork CI plumbing into the upstream mirror, the
single worst outcome this guard prevents. Folding it in would have quietly dropped the guard on the
one PR that most needs it.

Docs aligned to what is actually running

  • The handover doc's synchronization section described rebuilding the provenance stack and importing
    a C1..C2 tree delta. Rewritten around the direct merge, keeping a short what this replaced note
    and why that was never necessary for upstream in the first place.
  • Core invariants and operational rules no longer instruct importing a tree delta or recording
    ancestry with merge -s ours.
  • fork-stack.md: 714 lines describing the removed workflow → a short topology doc. What each
    branch is, that the provenance branches are no longer rebuilt, that their PRs stay draft.
  • stack-history-rewrite.md: deleted with its inbound links. It documents rewriting stack
    history, which no longer happens.

docs/ is now fork-base.md, fork-stack.md, README.md, sidebar-v2.md,
stable-dev-release-branch-handover.md.

Verified: no reference anywhere to removed tooling or deleted docs, and no broken internal links in
the handover doc.

Validation

  • Full recursive typecheck clean across 17 packages.
  • 2248 tests pass. The one failure (CodexTextGeneration structured output) reproduces on
    fork/dev unmerged and predates this change.
  • classify-deployment-diff.test.sh passes.
  • The draft lock's exact jq query verified against the trimmed manifest: matches [fork] selected upstream candidates #27, rejects an
    unmanaged number.

Not done

docs/fork-stack.md is kept (bannered). It has ~10 inbound links from AGENTS.md and documents the
provenance branches, which still exist. Removing it is a further docs pass, not part of deleting the
tooling.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

omegent-app Bot and others added 2 commits August 6, 2026 10:26
Nothing drives this machinery any more. Overlays were drained and deregistered,
fork/changes and fork/integration are frozen, and upstream is now merged
straight into fork/dev -- a plain git merge, because upstream is append-only and
the previous sync recorded its ancestry.

Removed: fork-stack.ts, rebase-pr-stack.ts, compose-integration-overlays.ts,
rebase-integration-overlays.ts and client-overlay-owner.ts with their tests; the
compose-integration, rebase-pr-stack and force-update-overlay-tip workflows;
client-overlay-ownership.json; the four fork:* package scripts; and the
stack-ship-path and client-overlays docs.

Kept, deliberately:

classify-deployment-diff.sh is not stack tooling. It is the shared definition of
what a diff means, run by both fork-release and the smart-host poller so the two
cannot disagree about what ships. Its tests still pass.

managed-pr-draft-lock.yml still guards #255, #1 and #27, which remain open
drafts. Merging #255 would push fork CI plumbing into the upstream mirror, so
the lock matters more now that nothing else watches those branches.
pr-stack.json survives purely as that workflow's allowlist, trimmed to the three
PRs and annotated to say so.

The lock read its allowlist from fork/changes, a frozen branch, so edits to the
manifest could never have taken effect. It now reads fork/dev.

Agent guidance is rewritten rather than deleted: AGENTS.md referenced removed
commands in a dozen places, which would have sent an agent to a script that no
longer exists. fork-stack.md, stack-history-rewrite.md and fork-base.md are
bannered or corrected -- the branches they describe still exist even though the
workflow around them does not.

Verified: full recursive typecheck clean, 2248 tests pass, classifier tests
pass, and the draft lock's jq query still matches the managed PRs and rejects an
unmanaged one. The single failing test predates this change.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
The draft lock triggered on every pull request in the repository, started a
run, looked itself up in an allowlist, exited, and left a "Keep managed PR
draft" check on PRs it had nothing to do with.

Filter it to the bases the managed PRs actually target: main, fork/base and
fork/tim. Ordinary work targets fork/dev, so it no longer runs there at all.

Not folded into Fork CI, which was the other option considered. Fork CI
deliberately does not watch main, and #255 targets main -- merging that would
push fork CI plumbing into the upstream mirror, which is the single worst
outcome this guard exists to prevent. Folding it in would have quietly dropped
the guard on the one PR that most needs it.

Docs are aligned to the model that is actually running rather than the one that
was proposed:

- The handover doc's synchronization section described rebuilding the provenance
  stack and importing a C1..C2 tree delta. That is gone; upstream is merged.
  Rewritten around the merge, with the old procedure kept as a short "what this
  replaced" note and why it was never necessary for upstream.
- Core invariants and operational rules no longer instruct importing a tree
  delta or recording ancestry with merge -s ours.
- fork-stack.md was 714 lines describing the removed workflow. Replaced with a
  short topology doc: what each branch is, that the provenance branches are no
  longer rebuilt, and that their PRs stay draft.
- stack-history-rewrite.md is deleted along with its inbound links. It documents
  rewriting stack history, which no longer happens.

Verified: no reference anywhere to removed tooling or deleted docs, and no
broken internal links in the handover doc.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app omegent-app Bot changed the title chore(stack): remove the fork stack and overlay tooling chore(stack): remove stack tooling, scope the draft lock, align docs Aug 6, 2026
@patroza
patroza merged commit 707b68a into fork/dev Aug 6, 2026
6 of 10 checks passed
patroza added a commit that referenced this pull request Aug 6, 2026
Reverts the `edited` half of
[#359](#359). **My change, my
bug** — and it is a merge-gate bypass, so it should go in ahead of the
other open PRs.

## What I got wrong

#359 added `edited` to the `pull_request` activity types so retargeting
a PR would run CI, with a
job-level `if` guard skipping edits that did not move the base. I
reasoned the guard would keep the
cost down. It does — but a **skipped job still publishes a check run**,
GitHub counts a skipped
required check as **satisfied**, and the skipped run **supersedes** the
real one.

So editing the title or body of a PR whose checks had *failed* replaces
those failures with skipped
runs and leaves it mergeable.

Observed live on #364 — I edited the body, and:

```
Check                          skipping
Mobile Native Static Analysis  skipping
Release Smoke                  skipping
Test                           skipping
```

with `mergeable: MERGEABLE`, `mergeStateStatus: CLEAN`. Every required
check satisfied by a run that
executed nothing.

## Change

Drop `edited` and the four job guards. Keep `ready_for_review`, which is
what actually fixed the case
#359 was opened for: #357 had been retargeted and then **marked ready**,
and nothing fired.

## What this gives up

Retargeting without a push no longer triggers CI. That is rarer now that
overlays are gone and
everything targets `fork/dev`, and it is recoverable — close and reopen
fires `reopened`, which is
watched. That is how #357 was unblocked in the first place.

A gap that needs a deliberate action to work around beats a bypass that
needs a title edit to
trigger.

Co-authored by [@patroza](https://github.com/patroza)

opened by [Patrick Roza](https://discord.com/users/95218063095377920) in
chat thread **Discord** ·
[Discord](https://discord.com/channels/1083767712431480922/1534783738322485399/1534783738322485399)
· [T3](https://t3vm/?thread=584a9ad3-243e-4308-8a13-49acdd758b17)

Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant