Skip to content

ADR 0243: chain builds ahead of main, and landing trains (#230, step 0; filed unaccepted) - #280

Open
Hafeok wants to merge 17 commits into
mainfrom
claude/nice-mendel-495j4y
Open

Hafeok wants to merge 17 commits into
mainfrom
claude/nice-mendel-495j4y

Conversation

@Hafeok

@Hafeok Hafeok commented Nov 11, 2026

Copy link
Copy Markdown
Owner

Completes: #230

What this changes, and why

Step 0 of the chain-builds work. This is the ADR for #230, with the maintainer's review of 2026-11-11 folded in.

It is stacked on #261 (which stacks on #260 and #259), so it lands after them. Its own commits are the last two: 743af6a and 5a4850b. It stacks there for two reasons:

Number 0243. Open pull requests already hold 0240 (#268), 0241 (#259, and also #264, filed as #278) and 0242 (#267).

What was measured

  • eng/ci.cs --only decision-sets: pass (220 sets, 1,528 decisions).
  • eng/issue-refs.cs: 13 commits reference an issue, and every closing keyword is a trailer.
  • eng/dco.cs: every commit is signed off.
  • No code changed, so the test counts are unchanged.

What was found

What is left

Head: 5a4850b7.


Checklist

  • Issue referenced: Refs on each commit, and Closes #230 on the ADR's commit.
  • ADR cited: ADR 0243 filed unaccepted; 0088 and 0102 amended, add-only.
  • Specification updated, or n/a: n/a. docs/spec/storage-format.md changes in step 3.
  • API baseline updated, or n/a: n/a.
  • Conformance baseline updated, or n/a: n/a.
  • Tests: n/a. No code changed.
  • A new gate's failure path was proven by running it: n/a. No gate added.
  • Signed off: by the commit-msg hook.
  • A traceability record exists: docs/traceability/2026-11-11-issue-230-chain-builds-ahead-of-main.md.
  • dotnet run eng/ci.cs passes locally: only the process gates were run. Red on CS0618 is not expected, because nothing cites the new keys yet.

Generated by Claude Code

Hafeok and others added 16 commits November 10, 2026 13:29
…fier is allowed

The maintainer's ruling of 2026-10-27, which #169's gate implements,
reverses the commit-message half of ADR 0033's amendment of 2026-10-02.
A reversal is a change of meaning, so under ADR 0068 point 2 it is a
supersession: ADR 0241 supersedes that one ruling, and
ModelNamedInTheRecordNotTheCommit moves to 0241's set under its key,
filed unaccepted (ADR 0066). 0033's Status names the supersession, and
AGENTS.md (Every commit, Never) and CONTRIBUTING.md state the ruling.
The record still names the tool and the model exactly.

Refs #257
Refs #169

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
A section after Every commit: work starts from an issue, decisions and
blockers go on it when they arise, found work is filed at once, the pull
request lists every issue it touches, closings are checked after landing,
and abandoned work is closed as not planned. As the prompt's note of
2026-11-10 asks, "the session" in Landing and After landing is whichever
session lands: the delegate lands and checks (ADR 0239), and a cloud
session posts its head, lists the issues and asks.

Refs #257

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
The prompts, the plan's correction from an amendment to ADR 0241's
supersession, what changed and what was found (#258). The model is left
for the maintainer to fill in, as ADR 0033 provides.

Closes #257
Refs #169

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…in moves

At both steps land.cs lists every issue a Closes, Fixes or Resolves
trailer line in main..head closes, with its title, recognising a trailer
as eng/issue-refs.cs does. A pull request's Completes: line is required:
missing, malformed, or naming an issue no pushed trailer closes, the
landing is refused, and a body it cannot read is refused too rather than
skipped. A release descriptor's trailer is a commit's trailer, so it
counts. After --main moves main, an issue a pushed trailer names that is
still open is printed with its commit and the exit is 1; GitHub unread
is 2. It closes nothing itself. Nine fixtures under tests/fixtures/land/,
run by eng/ci.cs's land-fixtures job.

Refs #209

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
The template opens with `Completes: none` and says what the line is and
that it is not a closing keyword (#108). AGENTS.md's Landing and After
landing bullets name the line, land.cs's refusal and its check after
main moves, so the rule and the script say the same thing.

Refs #209

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…landing

Closes #209
Refs #257

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…ogether

Under ADR 0224 point 2 the SBOMs are created at the descriptor's date, so
the two move together. --sbom runs eng/sbom.cs created at the current UTC
day (or --today), replaces the sbom: block with its sbom.txt and sets
date: to that day in one edit, then regenerates CHANGELOG.md. --from
takes SBOMs already written and refuses them unless each was created on
that day; --out says where eng/sbom.cs writes. A tagged version and a
descriptor with no sbom: block are refused. --draft points at it.

Gates: four fixtures under tests/fixtures/release-sbom/, run by eng/ci.cs's
release-sbom-fixtures job, and a ci.yml step that rewrites the newest
format-2 descriptor, renamed and backdated, in a scratch directory and
requires every SBOM created at the new date and eng/sbom.cs --descriptor
to match.

Refs #248

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…fore landing

At both steps, each release descriptor the head adds or changes is judged
against the landing day (UTC): a date: more than three days earlier, or
none, is refused, printing the release.cs --sbom command that writes the
digests and the date again. Three fixtures join tests/fixtures/land/: four
days refused, three days passing, no date refused.

Refs #248

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
docs/releases.md rule 3, amended 2026-11-10 with the old text struck and
kept, and rule 11's "written, not typed" naming release.cs --sbom. ADR 0102
gets a dated amendment, add-only, saying the same, since rule 3 restates its
line on date; no ruling changes, and ADR 0224 is untouched. AGENTS.md's
close-out names the command and land.cs's refusal.

Refs #248

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…s its digests

Closes #248

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
The three pull requests and their order, ADR 0241 and ADR 0102's
amendment, the issues opened, closed and touched, the fixture counts, the
questions for the maintainer, and #258 deferred.

Refs #257
Refs #209
Refs #248

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
Brings in what landed since 81fba3d, the Web UI among it, so that the
workflows main runs on the pull request find what they build.

Refs #257

Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
Refs #209

Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
Refs #248

Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
The maintainer's decision on #230 (accepted as written on 2026-11-06),
with his review of 2026-11-11 folded in: the four open questions settled
(a reserved header byte as the unstable-build marker, stable tags cut by
a workflow on request, packages and SBOMs only, the chain# namespace)
and seven additions (landing trains, a pinned gate, bounded trial
merges, stable implies accepted, no squash for chain branches, ADR
numbers at landing as a step of its own, chain branches opt-in). Each is
marked as settled in review, and a table lists every difference from the
issue's text.

Thirteen keys, filed unaccepted (ADR 0066). Dated amendments to 0088
(main moves by fast-forward, a merge commit made on a branch counts, and
a train is one checked head) and to 0102 (chain builds are outside a
release's scope, and the release workflow refuses chain/*).

Numbered 0243: open pull requests hold 0240, 0241 (twice, #278) and 0242.

Refs #277

Closes #230

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NbWSYNzDrbT3ENstGnmH3N
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
Refs #230

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NbWSYNzDrbT3ENstGnmH3N
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>
…nder

The maintainer's review of #281, 2026-11-11: land.cs and agent review
run git merge-tree under the same settings. Attributes come from the
train so far, never from a working tree, with the global and system files
off; renames are fixed; a repository-local info/attributes refuses the
train. A tree mismatch from a different git refuses the train too.

`git merge-tree` reads the working tree's .gitattributes: a merge=union
attribute there turned a conflict into a clean merge in a test, so the
lander's checkout and the judge's could otherwise disagree.

Refs #230
Refs #277

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NbWSYNzDrbT3ENstGnmH3N
Signed-off-by: Emil Okkels Klein <emil@okkels-klein.dk>

Hafeok commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

The maintainer's decisions of 2026-11-11, recorded

  1. The rulings are accepted on this pull request before it lands, and ADR proposal: chain builds ahead of main (feature tree, chain builds, path-encoded versions) #230 closes with it. The Closes #230 trailer is on 743af6a. The accepted-by lines are yours, or your delegate's on your machine (ADR 0239); this cloud session does not write them. Once they are added, the thirteen keys of chain-builds-ahead-of-main stop being CS0618 in the steps that cite them.
  2. The namespace stays https://w3id.org/varve/chain#.
  3. Both of the session's additions stay: GitHub's merge queue as a rejected alternative, and the revisit condition on trains.
  4. A one-member train stays refused, and a failed train whose shorter form has one member prints the plain landing command (Landing trains: land.cs --train, and agent review admits a train of approved heads (#277) #281).

New head d6ffddca8f50. It adds one bullet to ADR 0243 point 10: the merge is pinned. land.cs and agent review run git merge-tree under the same settings; a tree mismatch from a different git refuses the train; a local info/attributes refuses it. The rest of the ADR is unchanged.

The full eng/ci.cs is running on this head; results to follow.


Generated by Claude Code

Hafeok commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

dotnet run eng/ci.cs at d6ffddca8f50: all 66 jobs pass, exit 0, 18 min 6 s

Run in a fresh worktree of the head, with the W3C submodules initialised, on a 4-core Linux container. This is the whole pipeline as eng/ci.cs defines it: no --only, nothing skipped.

  • Process gates:
    • issue-refs: 14 commits reference an issue, and every closing keyword is a trailer;
    • dco: 14 commits checked, 3 merges skipped;
    • decision-sets, register, licence-headers, banned-symbols, required-checks and release-pending pass.
  • Fixtures: land-fixtures, agent-review-tamper and every other fixture job pass.
  • Build: restore, build (warnings as errors) and build-benchmarks pass.
  • Tests: all 29 test-* jobs pass. The slowest is test-store, at 328 s.
  • Ratchet: conformance passes.
  • Packaging: pack and decision-report pass.

Red on CS0618 is not expected: nothing cites the new keys yet. This PR changes no test project, so the test counts are main's.

Not run here: the CI-only legs (Windows, Native AOT, browser WASM, the auth and container legs). Those are GitHub's.


Generated by Claude Code

This branch was successfully deployed

1 active deployment
gates — d6ffddca Deployed Nov 11, 2026 by Hafeok via agent review (judge) #1115
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.

ADR proposal: chain builds ahead of main (feature tree, chain builds, path-encoded versions)

1 participant