Artifact 1c50fe8add4a93171b93686ef8079f8c6b086def59fb3528874585d9121571fb:
- File
conformance/rfcs/erratum/sync-protocol-01-s6.6-file-card-after-refused-push.md
— part of check-in
[8cc3d7c5e4]
at
2026-10-13 02:23:50
on branch test/conformance-01-drafts
— test(conformance): check the -01 drafts of artifact, repo-state and sync
Re-pin the conformance suite to draft-fossil-artifact-format-01, draft-fossil-repo-state-01 and draft-fossil-sync-protocol-01, copied byte for byte from zit check-in 100351e26c. The delta format has no -01 and stays on -00. The -00 errata are folded into -01 and are no longer pinned; the six -01 errata are pinned for the fossil 2.28 behavior they record. conformance/rfcs/README.md records where each copy came from.
The requirement tables are re-read against -01, and new cases cover the date tag's event time (repo-state §4.2 step 6), the Julian-day grammar, a delta manifest naming a delta, dropped reserved F cards, the trailing-punctuation retry, truncated payloads, errors N, a file card after a refused push, the end of a request after a failed login, and the answer to a gimme for private content.
No library behavior changes. Where -01 departs from fossil 2.28 and go-libfossil follows fossil (a cancelled, unparsable or 0 date tag), the cases are marked as deviations. The non-conformances the re-pin exposes are marked as gaps, tracked in #370, #371, #372, #373, #374 and #375. (user: [email protected], size: 2771) [annotate] [blame] [check-ins using] [more...]
# Erratum — draft-fossil-sync-protocol-01 §6.6 | | | |---|---| | **Document** | `draft-fossil-sync-protocol-01` | | **Section** | 6.6 — Capability Model (file and cfile cards when push is not enabled) | | **Type** | Technical (the text says later cards are still processed; Fossil stops at the first file or cfile card) | | **Status** | Applied in `draft-fossil-sync-protocol-01` (2026-10-12) | | **Reported** | 2026-10-12 | | **Submitter** | Dan Mestas | | **Found via** | A reader implementing §6.6 from the text alone, then Fossil's source | ## 1. Summary The -01 refusal paragraph says that after a refused push "later file and cfile cards are refused individually, and later cards, including a pull, are still processed". The form of the refusal is not given, and the second half is wrong: in Fossil the first file or cfile card that arrives while push is not enabled is answered with a reset `error not authorized to write` and ends card processing for the request. ## 2. Location §6.6, the sentence beginning "In both forms push is not enabled for the request". ## 3. The reference behavior Fossil 2.28 `page_xfer()` (`src/xfer.c:1360-1392`): for a `file` or `cfile` card, `if( !isPush )` resets the accumulated output, emits `error not\sauthorized\sto\swrite`, increments the error count, and executes `break`, which leaves the card loop. The same `break` follows a handler validation failure. A `uvfile` card is not gated on push and continues. After the loop, the end-of-request work for an accepted pull still runs (`:1922-1925`), as §6.4 already states for a failed login. ## 4. Impact Observable. A conforming server that keeps parsing would answer a later `pull` card with inventory that Fossil would not send, and would process cards Fossil never reads. ## 5. Correction ```diff - forms push is not enabled for the request, so later file and cfile - cards are refused individually, and later cards, including a pull, - are still processed. A client that sends both cards SHOULD send + forms push is not enabled for the request. Later cards, including + a pull, are still processed until the first file or cfile card: + that card is refused with reset output and error not authorized to + write, and ends card processing for the request, as a handler + validation failure does (Section 5.2). The end-of-request steps + for a direction established earlier, such as the igot inventory + for an accepted pull, are still performed (Section 6.4). A client + that sends both cards SHOULD send ``` ## 6. Rationale States the refusal form and the stop, which are the same reset-and-stop shape §5.2 already defines for handler failures. ## 7. Verification - Source: Fossil 2.28 `src/xfer.c:1360-1392`, `:1922-1925`.