fix(pipeline): same-named sources in two wings, entity/source slug clashes, model-chosen types (review of #211)
- a source whose slug is taken by anything but this wing's own page gets a wing-qualified, stable slug (talk-homelab) instead of failing the ingest - an extracted entity/concept whose slug belongs to a different page is skipped with a warning, so one page can no longer lock a source out of re-ingest - in a wing only source/concept/entity are valid page types; the model (and so the clip) can no longer choose wiki/<type>/ directories Mutation-checked; stable-slug choice pinned directly because title resolution masks it at the Run level. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,7 @@ func BuildPagesIn(wing string, rawPages []RawPage, sourceSlug, date string) ([]w
|
||||
for _, rp := range rawPages {
|
||||
// The type becomes a directory under wiki/; "../raw" wrote outside it
|
||||
// (PR #147 review). Only a plain lower-case name is a page type.
|
||||
if !validPageType.MatchString(rp.Type) {
|
||||
if !validPageType.MatchString(rp.Type) || (wing != "" && !layoutType(rp.Type)) {
|
||||
warnings = append(warnings, fmt.Sprintf("skipped page with invalid type %q", rp.Type))
|
||||
continue
|
||||
}
|
||||
@@ -42,6 +42,11 @@ func BuildPagesIn(wing string, rawPages []RawPage, sourceSlug, date string) ([]w
|
||||
return out, warnings
|
||||
}
|
||||
|
||||
// layoutType reports whether a wing-mode page type has a place in the layout.
|
||||
// The type comes from the model, so from the clip being ingested: anything else
|
||||
// would name a directory (wiki/<type>/) of the model's choosing.
|
||||
func layoutType(t string) bool { return t == "source" || t == "concept" || t == "entity" }
|
||||
|
||||
var validPageType = regexp.MustCompile(`^[a-z][a-z0-9-]*$`)
|
||||
|
||||
func computeSlug(rp RawPage, sourceSlug string) string {
|
||||
|
||||
Reference in New Issue
Block a user