Artifact ca1539a1e99461a07f99f376494e40a2d7951b1729c2cb14c010c71b03b57a39:
- File
conformance/rfcs/erratum/sync-protocol-01-s5.3-errors-count.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: 2666) [annotate] [blame] [check-ins using] [more...]
# Erratum — draft-fossil-sync-protocol-01 §5.3 | | | |---|---| | **Document** | `draft-fossil-sync-protocol-01` | | **Section** | 5.3 — Comment Lines (the value of N in the timestamp comment) | | **Type** | Technical (N is never defined; receivers are told not to act on it) | | **Status** | Applied in `draft-fossil-sync-protocol-01` (2026-10-12) | | **Reported** | 2026-10-12 | | **Submitter** | Dan Mestas | | **Found via** | A reader implementing §5.3 from the text alone | ## 1. Summary §5.3 gives the syntax of `# timestamp DATETIME errors N` and says N is informational, but never says what N counts. A sender has nothing to put there. ## 2. Location §5.3, the paragraph beginning "DATETIME is exactly 19 bytes". ## 3. The reference behavior Fossil 2.28 `page_xfer()` keeps a counter `nErr` (`src/xfer.c:1278`) that is incremented at each error card the server's own card handling emits: wrong project, the authorization refusals, multiple or failed login, the file, cfile and uvfile handler failures, and the script failures (`:1330-1904`). The closing comment prints it (`:1970`). The counter records errors raised, not cards present: a later reset discards the cards of earlier errors but not their count, so a push refused at `:1517` followed by a file card refused at `:1363` leaves one error card and `errors 2`. Three error cards are never counted: the unknown-operator `bad command` error (`:1893`), the private-content refusal emitted by `server_private_xfer_not_authorized()` (`:1138-1140`), and the SHA3 version refusal emitted by `xfer_cannot_send_sha3_error()` (`:523-527`), which is why Appendix A.2 shows that error followed by `errors 0`. ## 4. Impact Cosmetic. N is informational and no receiver acts on it, but a cleanroom sender needs a definition. ## 5. Correction ```diff additional internal validation; DATETIME estimates skew, while N is - informational and not a wire error. + informational and not a wire error. N counts the errors the + server raised while handling the request; it can exceed the error + cards present, because a reset discards earlier output. Fossil's + server does not count the unknown-operator error, the private- + content refusal, or the SHA3 version refusal. A receiver MUST NOT + act on N. ``` ## 6. Rationale Defines N as what Fossil's counter holds, records the three cards Fossil leaves out and the reset effect so a byte-comparing test is not surprised, and keeps N informational. ## 7. Verification - Source: Fossil 2.28 `src/xfer.c:1278`, every `nErr++` between `:1330` and `:1904`, `:1893`, `:1138-1140`, `:523-527`, `:1970`; Appendix A.2 of the draft.