Skip to content

[fork] base: GitHub-hosted CI plumbing - #255

Draft
patroza wants to merge 1 commit into
mainfrom
fork/base
Draft

[fork] base: GitHub-hosted CI plumbing#255
patroza wants to merge 1 commit into
mainfrom
fork/base

Conversation

@patroza

@patroza patroza commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Summary

Permanent draft provenance layer fork/base: sits between upstream main and fork/tim.

Contains only fork repository adaptations required for this fork (no Tim imports, no product):

  • .github/workflows/fork-ci.yml (GitHub-hosted runners)
  • Blacksmith-free .github/workflows/ci.yml runners
  • docs/fork-base.md

Stack order:

main → fork/base → fork/tim → fork/candidates → fork/changes → overlays → integration

Do not merge. Draft lock keeps it open.

@patroza patroza added OVERLAY Long-lived draft overlay composed into fork/integration; do not merge directly. and removed OVERLAY Long-lived draft overlay composed into fork/integration; do not merge directly. labels Jul 31, 2026
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
@patroza patroza added the FORK Long-lived protected fork provenance or private layer; do not merge directly. label Jul 31, 2026
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Jul 31, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Aug 1, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Aug 1, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Aug 4, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Aug 4, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
@patroza
patroza force-pushed the fork/base branch 2 times, most recently from eb22685 to 33430ba Compare August 4, 2026 16:06
patroza pushed a commit that referenced this pull request Aug 4, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
patroza pushed a commit that referenced this pull request Aug 5, 2026
Sit fork/base between upstream main and Tim so Blacksmith-free runners
and Fork CI live once under all provenance layers. Register PR #255 in
pr-stack; retarget Tim to base. Drop the need for tip CI hacks on
tim/candidates.
@patroza
patroza force-pushed the fork/base branch 2 times, most recently from a4e5540 to 0c4fd9a Compare August 5, 2026 13:51
omegent-app Bot added a commit that referenced this pull request Aug 6, 2026
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>
patroza added a commit that referenced this pull request Aug 6, 2026
…364)

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 #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](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

FORK Long-lived protected fork provenance or private layer; do not merge directly.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant