Skip to content

Compare the sentence in the roster against the description each repository publishes #75

Description

@iderex

Depends on #5 and on the roster parser issue.

The roster carries one sentence per plugin and the site renders it. Two other
copies of that sentence are already published, and they do not agree:

gh api repos/Flowfin/.github/contents/profile/README.md --jq '.content' \
  | base64 -d | grep -o 'Share one library item[^|]*'
Share one library item with invited guests, through a link that expires and can be revoked
gh api repos/Flowfin/jellyfin-plugin-share-links --jq '.description'
Share single Jellyfin items with invited, signed-in guests through expiring links

Run 2026-08-08. One plugin, two sentences, written at different times and never
compared. It is not one repository that has a description either:

gh repo list Flowfin --limit 60 --json name,description \
  --jq '[.[]|select(.name|startswith("jellyfin-plugin-"))|select(.description!="")]|length'
12

#5 makes the roster the source for the site and for the profile table and stops
there. That leaves the description on each repository as the copy nothing
derives and nothing compares, and this site is about to make the disagreement
easy to find, because a reader who opens a plugin page and then the repository
it links meets both sentences inside one click.

The comparison shape is a decision this issue records rather than assumes. Two
sentences written for different places can differ in wording and mean the same
thing, and a check demanding an exact match against prose somebody edits freely
is a check that goes red for nothing and gets switched off. Either the roster
sentence is the one both places carry, and the comparison is exact, or the
roster gains a second field for the repository description and the check
compares that one. The first costs a rewrite of twelve descriptions once. The
second costs a field and admits that the two audiences are different, which they
are: one is read next to a state word on a page that explains the project, the
other is read in a list of repositories with no context at all.

The check reports and does not write. A repository description is a setting on
another repository, nothing here has any business changing it, and the output is
a difference a person applies. That is #25's rule for the same reason.

It runs on a schedule rather than in the merge gate. It reads twelve
repositories over the network, and a merge blocked because somebody edited a
description elsewhere is a gate punishing the wrong change.

Fail closed on a fetch error. A run that could not read the descriptions says so
rather than passing as though they agreed.

Done when

The check runs on a schedule over the twelve repositories, reds when a
description differs from what the roster says it should be, names each differing
repository with both strings, writes nothing anywhere, and reports a fetch
failure as a failure rather than as agreement; and the issue records which of
the two comparison shapes was taken and what the other would have cost.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions