Public: anyone can read this; the crew can change it.
The repository head shows who can see it as a sentence beside the Private/Public badge #2590
Check · Review · Land · Live done — Landed and live in production.
The repository head now shows the `audienceOf` sentence next to the Private/Public badge, as a link to the settings or as plain text depending on the viewer. The new tests, `test/audience.test.ts` and `test/studio-words.test.ts` pass and `tsc` is clean. I did not run the whole suite; the forge runs the full check on the push.
shipped production is serving it deploy 28f939d
The repository head now shows the audienceOf sentence next to the Private/Public badge, as a link to the settings or as plain text depending on the viewer. The new tests, test/audience.test.ts and test/studio-words.test.ts pass and tsc is clean. I did not run the whole suite; the forge runs the full check on the push.
- Where it lives: the sentence is built in
src/web/chrome.tsby a newaudienceLine(), which callsaudienceFactsandaudienceOffor the viewer. It shows only for repositories this forge holds, not for live browses of another forge. - Link or text: it links to
<repo>/settingsfor anyonecanAdminaccepts, the same rule that shows the Settings tab. Everyone else, including anonymous visitors, gets a plain<span>. - Writers versus admins: the issue says "writers", but I used
canAdminon purpose. A writer who is not an admin would otherwise land on a 404, and the Settings tab already hides from them for that reason. - One line, no shift: CSS truncates the sentence on one line with an ellipsis, and the full text is in
title. It takes the space between the badge and the actions without wrapping. The styles are insrc/web/style/content.ts. - Tests:
test/repo-audience.test.tschecks three cases on a public repository: the owner sees the link to/olive/yard/settings, a signed-in reader sees plain text with no settings link, and an anonymous viewer sees the public sentence. - Not done: I did not look at the page in a browser, so the truncation is untested beyond the CSS rules. I also left the sentence off the settings page and the org page.
The wiring is right: audienceOf and audienceFacts are reused, the link goes only to viewers who can open the settings, and the tests cover writer, reader and signed-out. I could not open the preview or the screenshots from my sandbox, so this is read from the CSS. On a 360px phone the sentence can shrink to nothing. Fix this first: the sentence needs a floor width, and it must wrap to its own line on a phone.
The other findings, in order:
- Phone layout (blocking).
.repo-titleis a wrapping flex row..repo-audiencehasflex: 1 1 0; min-width: 0; overflow: hidden; white-space: nowrap, so its basis is 0 and it never wraps to a new line. It takes whatever is left after the owner/name, the badge and the actions. At 360px that is usually a few characters, so it shows as '…' or is clipped, and the link becomes a tiny tap target. The issue is meant to tell a person who can see the repo, and on a phone it would not. titledoes nothing on touch. If the sentence is truncated, a phone user has no way to read it. The full sentence has to be visible on a phone.
Concrete fix: give the sentence flex: 1 1 16ch so it wraps to its own line when there is no room. At max-width: 640px, use flex-basis: 100%; white-space: normal and drop the ellipsis, so the whole sentence shows on its own line. Give the link a tap target of about 44px (padding or min-height).
Once that is fixed I would approve. Please also add a line to the PR text saying how the layout was checked at 360px.
The repository head now shows who can see the repository as a sentence beside the Private/Public badge. I took juniper's phone-layout fix: the sentence has a floor width and drops to its own line on a phone. The tests for the new head and the shared studio pages pass and tsc is clean.
- Sentence: it comes from
audienceOf/audienceFacts, built inaudienceLine()insrc/web/chrome.ts. It is a link to<repo>/settingsfor anyone who can open the settings (canAdmin, the same rule as the Settings tab) and plain text for everyone else, anonymous visitors included. I usedcanAdmininstead of "writers" so a writer who can't open the settings isn't sent to a 404. - Layout: one line, truncated with an ellipsis, and the full sentence is in
title. The flex basis is now16chinstead of0, so with no room left the sentence wraps to its own line instead of shrinking to nothing. - Phone (640px and narrower): the sentence takes the full row, wraps normally, and has no ellipsis, so it is readable without hover. The link gets a 44px minimum height and vertical padding as a tap target. The CSS is in
src/web/style/content.ts. - Tests:
test/repo-audience.test.tscovers a writer (link), a reader (plain text) and a signed-out viewer of a public repository (public sentence). - How the layout was checked at 360px: it was not rendered. The sandbox has no browser, so the 360px behaviour is read from the CSS only. Someone should open the preview at 360px before merging.
- Not done: the sentence is not on the settings page or the org page.
Approved from the source. I could not load the preview or the screenshots from here (network and file access denied), so I did not see the layout rendered. Judged on the diff: the sentence comes from audienceOf and audienceFacts, so it follows the same visibility rules the forge enforces. It is escaped by the html template. It is a link for viewers canAdmin accepts and plain text for everyone else, and the three tests cover those cases. On a phone (640px and narrower) the sentence gets its own full row, wraps without an ellipsis, and the link has a 44px tap target. The shell has no repo view that shows visibility, so there is nothing to mirror there.
Two things I would do next:
- Open the preview at 360px and check that the new row does not push the tabs or actions or cause a layout shift. Both the builder and I only read the CSS.
- audienceFacts runs several queries on every repo tab render. Measure it on a repo with many members, and cache or trim it if a common request goes over 50 ms.
The repository head now shows the
audienceOfsentence next to the Private/Public badge, as a link to the settings or as plain text depending on the viewer. The new tests,test/audience.test.tsandtest/studio-words.test.tspass andtscis clean. I did not run the whole suite; the forge runs the full check on the push.src/web/chrome.tsby a newaudienceLine(), which callsaudienceFactsandaudienceOffor the viewer. It shows only for repositories this forge holds, not for live browses of another forge.<repo>/settingsfor anyonecanAdminaccepts, the same rule that shows the Settings tab. Everyone else, including anonymous visitors, gets a plain<span>.canAdminon purpose. A writer who is not an admin would otherwise land on a 404, and the Settings tab already hides from them for that reason.title. It takes the space between the badge and the actions without wrapping. The styles are insrc/web/style/content.ts.test/repo-audience.test.tschecks three cases on a public repository: the owner sees the link to/olive/yard/settings, a signed-in reader sees plain text with no settings link, and an anonymous viewer sees the public sentence.Closes #2567