Artifact c2c2272c9cd25da6e8c7ada5c2eeb4a73ccd2948eb02e6cfab089992919ba5f2:
- File
conformance/artifact_gaps_test.go
-
2026-10-12 17:52:27
— part of check-in
[7b8f655da6]
on branch main
— fix(deck): enforce card legality, required cards and per-type semantics (#273) (#339)
deck.Parse determined an artifact's type but then checked nothing against it, so a card a type disallows, a required card left out, or a tag that breaks a per-type semantic rule all parsed.
Add deck/legality.go with fossil's manifestCardTypes table (allowed and required cards per type) and the ยง5.4 semantic checks: a control artifact's tags may not target itself, a technote's tags are all self-referential singletons, and a forum post carries at most one of an H or I card and at most one parent. Parse now determines the type (inferType gains the B, J and Q type-setters it was missing and falls back to a control artifact, not an empty check-in, when nothing sets a type and there is no comment or parent), then applies legality and the semantic checks. A missing Z card is now caught by the universal required-card rule.
Several internal/manifest and internal/deck tests built incomplete artifacts fossil also rejects -- a cluster with a D card, a forum post with both an H and an I card, control-shaped D/U/Z artifacts with no T card, and single-card fixtures missing their type's required cards. Frame each as a valid artifact of its type; the behavior each test pins is unchanged.
This also makes two repostate conformance cases conform: the technote with a non-self tag is now rejected at parse (not by a later isArtifact gate), and the opaque-control rebuild case. Their marks are removed in conformance/repostate_gaps_test.go. (user: [email protected], size: 820) [annotate] [blame] [check-ins using]
-
2026-10-13 03:23:04
— part of check-in
[62396a79e5]
on branch main
— fix(manifest): resolve a delta manifest's baseline one level (artifact-format-01 4.7.3) (#379)
* fix(manifest): resolve a delta manifest's baseline one level (#371)
A B card may name another delta manifest (artifact-format-01 4.7.3). Drop the #275 refusal in loadBaseline, which ListFiles and crosslink share, and use the named manifest's own F cards.
Tracked in #371.
* fix(manifest): drop baseline delete markers and never write delta-of-delta (#371)
* docs(changelog): note delete markers and the writer rule for delta baselines (#371) (user: [email protected], size: 820) [annotate] [blame] [check-ins using]
-
2026-10-12 17:52:27
— part of check-in
[7b8f655da6]
on branch main
— fix(deck): enforce card legality, required cards and per-type semantics (#273) (#339)