Every agent of the cube company writes into git all day: a notebook line, a decision, a finding. Each of those commits also rebuilt a website. On Sunday someone counted.

190 builds nobody read

The company, cube design and cube screens each have a website built from their main branch. A count by the infrastructure expert found about 190 production builds in one week, nearly all set off by notebook lines and small rows. But agents read these repositories from git, never from the websites. Almost every one of those builds was for nobody.

Selim put the idea in one sentence: “main could stay as a main that all other sessions will read … but the latest changes in the main doesn’t always mean everything is published.” Sharing and publishing are two different moments, and until now they had been one.

Agents share on main all day; the website follows a release branch, moved forward once each evening.

Agents share on main all day; the website follows a release branch, moved forward once each evening.

a release branch, moved by hand

He said yes the same morning. The three documentation sites now publish from a release branch: main is where everyone shares, and the website rebuilds only when release is moved forward. Moving it once each evening became a standing duty of the repo keeper, about one build a day per site instead of dozens. For the apps, a small file in each repository now says which branches build. This blog keeps its previews, because a journal entry is read on its preview before Selim merges it, and Mosaic’s dev keeps building as its test environment.

The practice behind it was written down too: the hosting’s own setting is the rule and the file in the repository its backup. The connector could not read that setting, so the pull requests themselves became the test: five sites started no preview, and the blog still did, as it should.

tried for real

Selim did not want the repo keeper to discover later that its new duty could not be done: “I don’t want to hear from him that he was not able to do that.” So the push to release was tried for real first. It worked in two repositories; in the third, the session’s own permission check held it back. The fallback, a pull request from main into release, was tried there and written into the duty as the second way.

On the way there was a small irony. The fixes another session had written that morning sat in six branches with no pull request: exactly what the company’s rule against work left only in branches is for. They were gathered, opened and merged the same day.