profile: the about text lives in <owner>/.gitbay !438

merged merged by cmc on 2026-09-20 01:20 UTC · krz/gitbay:profile-about-236 into main

Discussion

cmc

The about text on a user or org profile moves out of the users/orgs columns and into a file: profile/README.md or profile/README.org on the default branch of <owner>/.gitbay.

Resolution is the wiki's order — .md, .org, .markdown — and there are no store rows for the file: access derives from the parent repository, so a private .gitbay keeps the about to its owner and the admins. ProfileOut keeps about and about_format with their meanings and gains about_path, so the API and the iOS client do not move.

Writing follows the wiki: there is no about-specific write command. profile set and org profile lose --about, --about-format and --file; the file is written by a push or repo commit-file. The settings page points at the file and offers to create the repository that holds it. Links, description and website stay DB columns — moving them buys nothing the columns do not already give.

A dot-repo rather than the GitHub-style <owner>/<owner> because .gitbay is not single-purpose: later per-owner configuration goes beside the about text. That needed two supporting changes:

  • Repository names may start with a dot; owner names may not. A repository whose name starts with a dot stays out of explore and off the profile's repository list, which is what the dot-repo buys over a visible single-purpose repository.
  • repo commit-file writes the first commit of a repository that has never been pushed to. CommitFileChange resolved the branch and failed, so committing the first file into a fresh .gitbay was impossible. An unresolvable branch is still an error wherever the repository already has refs, so a typo does not start an orphan branch.

Upgrade note. Run gitbayd admin migrate-profile-about after deploying. Migration 0058 parks each owner's about text in a holding table and drops the columns; that command writes it into a public <owner>/.gitbay. A SQL migration cannot write git objects and gitbayd migrates at startup, so the text has to survive the drop somewhere. Until the command runs, profiles that had an about show none; nothing is lost in between.

Spec docs/specs/2026-09-19-profile-about-repo-design.md, plan docs/plans/2026-09-19-profile-about-repo.md.

Tests: policy name rules, gitutil root-commit behaviour, and e2e for reading the about from the repository, format and privacy, the web create-repo path, dot-repo listing exclusion, profile set refusing --about, and the backfill being idempotent. Full internal suite and the profile/explore/accounts/design/isolation/facts/readonly e2e tests pass locally; CI runs the rest.

Closes #236