Artifact 80923cf46f5b629b03f54405e02592ee40d21401c8c788e3ac1a7951004323c9:
- File
conformance/rfcs/erratum/sync-protocol-01-s6.6-refusal-text-suffix.md
— part of check-in
[f61c8174a8]
at
2026-10-17 20:27:53
on branch main
— test(conformance): re-pin the -01 drafts with the 2026-10-14/16 errata (#436)
zit check-in 3f86ff4261 applies six more errata to the -01 drafts. Copy the three drafts and the five new -01 errata files, re-pin their SHA-256 in the requirements tables, and record the check-in in the README.
The draft text changes add six requirements and reword two:
- AF-4.7.3-2: a named delta's delete markers are filtered out of a delta-of-delta's file set and lookups. - AF-4.7.8-1: an absent and a present empty J value decode alike. - AF-6.2-7: the Z verification state is read from the bytes at n-35 and n-34, not from card lines. - RS-5.3-3: a cancel keeps its card's value on the row it writes. - RS-5.3-6: the event table and propagation treat that value as null. - RS-5.3-7: an artifact's tag cards apply in card order. - RS-6.2-4: a branch root carrying *sym-NAME and -sym-NAME keeps the tag. - SP-6.6-4: a client recognizes a refusal by its leading text.
go-libfossil already behaves this way. Each row has a case, checked against fossil 2.28 where the harness does: 421 requirements, 420 covered, 1 partial (SP-9.5-7, as before).
The repo-state §5.3 step 3 change is filed in zit as a -00 erratum and is not pinned, like the other -00 errata; the -01 draft carries its text. (user: [email protected], size: 2959) [annotate] [blame] [check-ins using]
Erratum: draft-fossil-sync-protocol-01 §6.6
| Document | draft-fossil-sync-protocol-01 |
| Section | 6.6, Capability Model (the text of a refusal) |
| Type | Technical (a refusal can carry more text than the draft gives) |
| Status | Applied in draft-fossil-sync-protocol-01 (2026-10-16) |
| Reported | 2026-10-16 |
| Submitter | Dan Mestas |
| Found via | Rechecking the §6.6 refusal forms against Fossil's source; confirmed by running Fossil 2.28 |
1. Summary
§6.6 and the sections it points to give each refusal as an exact card:
error not authorized to write, message pull only - not authorized to
push, error not authorized to push configuration, error not authorized
to sync private content. Fossil appends because the 'localauth' setting
is enabled to every one of them when it refuses a loopback request that
its localauth setting requires to log in. A client that matches the whole
text misses the refusal. Only §10.1's autopush rule, which matches
%not authorized to write%, already allows for it.
2. The text in error
Page 22 (§6.6):
Otherwise the server resets accumulated output and emits error not authorized to write.
The draft says nothing about further text after any refusal.
3. What Fossil implements
src/xfer.c:
static char *whyNotAuth(void){
if( g.useLocalauth && db_get_boolean("localauth",0)!=0 ){
return "\\sbecause\\sthe\\s'localauth'\\ssetting\\sis\\senabled";
}
return "";
}
Every refusal in page_xfer() is written as, for example,
@ error not\sauthorized\sto\swrite%s(whyNotAuth())
and the same call follows the pull only message and the read, clone,
configuration and private-content refusals.
Checked with Fossil 2.28 [52445a27f1]: a repository with localauth set to
1, served by fossil server --localauth, and an anonymous push card sent
from 127.0.0.1. The reply is
error not\sauthorized\sto\swrite\sbecause\sthe\s'localauth'\ssetting\sis\senabled
4. Corrected text
Add to §6.6, after its last paragraph:
A server MAY append further words to the text of any refusal this document gives in the form "not authorized to ...", including the message form above. Fossil appends " because the 'localauth' setting is enabled" when it refuses a request from the loopback address because that setting requires such requests to log in. A client MUST recognize a refusal by the text this document gives at the start of the decoded text, not by the whole text.
5. Observable consequence of the uncorrected text
A client that compares the whole decoded text treats a refused push from a
local fossil server --localauth as an unknown error, or does not
recognize the pull only message, and reports or continues differently
from Fossil's client.
6. Implementations
zit's client does not match refusal text, and its server never appends to it. No change is needed.