Governance spec's bootstrap section contradicts the supersede decision #65
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The governance spec says to move server settings (
site_title,max_release_size) into git and replace--configwith startup flags, so the server is configured entirely fromsettings.git.That is incoherent with the decision the implementation actually made, and the implementer refused to build it rather than working around it silently — correctly.
b6dcbb7bhassettings.gitsupersedeserver.tomlon the access axis only:access.confis the sole authority on what an authenticated principal may do,keydir/the sole authority on which keys authenticate, andserver.tomlkeepsvisibility/[ui] anonymous/[http] anonymous_clone. The axes are disjoint so the two files cannot disagree — layering would let a forgottenserver.tomlsilently subtract access thataccess.confvisibly grants.Deleting
server.tomlwould delete the anonymous axis with nothing left to express it:access.confgrants to named principals, and@allmeans every enrolled key, so no rule in it can describe an anonymous HTTP request.So this needs re-deciding, not implementing. Options roughly: keep
server.tomlfor the anonymous/visibility axis permanently (what the code does today, and arguably right — it is per-deployment, not per-project); or extend the rule language with a genuine anonymous principal, which is a real design change and would want its own spec section.Until then the spec's bootstrap section should be marked as superseded so nobody implements it as written.
Migrated from git-collab issue
094e0f5046f8e021851de7bea374e518207b57b7.Original author: a73x dev@a73x.sh.
Close reason: merged in patch
1beeb03eResolved by inverting the default. Spec revised in
423e2c3.A repository is unlisted and unreadable without authentication unless a rule says otherwise. Absence of configuration becomes a decision rather than a gap, and
settings.gitonly ever expresses the exception — a positive grant, which is what the rule language is already good at.Two axes, kept separate:
@anonymousis a reserved principal in the rule table, because it is an access decision — resolved by the same first-match-wins evaluation, including-to deny it back.listedis anoption, because advertising is a display concern; that is gitolite's existingoptionline, stolen rather than invented. They are separate because "not in the list" and "404 to a direct URL" are genuinely different states, and a repo reachable if you know its name is a real configuration people use.Guard:
@anonymousmust never satisfy a write grant.RW = @anonymousis a config error rejected by push validation, not silently ignored.--configstays, reduced to bootstrap. The original spec was wrong to delete it:repos_dirand the listener addresses have to be read before any git object can be opened, includingsettings.gititself, which lives underrepos_dir. Everything not needed to reach settings.git does move into it —site_title,max_release_size, and the exposure axes above.This also generalises a special case
b6dcbb7bhad to hand-code:settings.gitis forced off the anonymous surface unless it opts in, because creating it must not publish the key roster to an internet-facing UI. Under the new default that falls out of the rule instead of being special.Implementation is not started. This issue now tracks building it rather than deciding it.