Tencent/WeKnora · warning

wiki page slug is required

Error message

wiki page slug is required

What it means

CreatePage validates that a new wiki page carries a non-empty Slug, the URL-identifying name of the page within its knowledge base. A page without a slug cannot be addressed or looked up by path, so the service refuses to persist it. Unlike ID, no default is generated for slug — callers must supply it.

Source

Thrown at internal/application/service/wiki_page.go:75

	taskPendingRepo interfaces.TaskPendingOpsRepository,
	redisClient *redis.Client,
) interfaces.WikiPageService {
	return &wikiPageService{
		repo:            repo,
		chunkRepo:       chunkRepo,
		kbService:       kbService,
		taskPendingRepo: taskPendingRepo,
		redisClient:     redisClient,
	}
}

// CreatePage creates a new wiki page
func (s *wikiPageService) CreatePage(ctx context.Context, page *types.WikiPage) (*types.WikiPage, error) {
	if page.ID == "" {
		page.ID = uuid.New().String()
	}
	if page.Slug == "" {
		return nil, errors.New("wiki page slug is required")
	}
	if page.KnowledgeBaseID == "" {
		return nil, errors.New("knowledge_base_id is required")
	}
	if page.Status == "" {
		page.Status = types.WikiPageStatusPublished
	}
	if page.Version == 0 {
		page.Version = 1
	}
	page.LastEditSource = types.WikiEditSourceFromContext(ctx)
	page.LastEditorID, _ = types.UserIDFromContext(ctx)
	stripWikiPageInlineChunkCitations(page)

	// Parse outbound links from content
	page.OutLinks = s.parseOutLinks(page.Content)
	if err := s.applyFolderToPage(ctx, page); err != nil {
		return nil, err

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Set page.Slug before calling CreatePage — derive it from the title (slugify) if not provided.
  2. Validate slug presence at the handler layer and return 400 with a clear message.
  3. If slugs should be optional, add auto-generation logic in the service instead of failing.

Example fix

// before
page := &types.WikiPage{Title: req.Title, KnowledgeBaseID: kbID}
// after
slug, _ := slugify(req.Title)
page := &types.WikiPage{Title: req.Title, Slug: slug, KnowledgeBaseID: kbID}
Defensive patterns

Strategy: validation

Validate before calling

if strings.TrimSpace(page.Slug) == "" {
    return httpError(400, "slug is required")
}

Prevention

When it happens

Trigger: Calling CreatePage with page.Slug == "" — e.g. constructing a WikiPage from a request that omitted the slug field or where slug generation (from title) was skipped.

Common situations: Client sends a create-page payload without the slug field; backend assumes slug is auto-derived from title but that logic lives in the caller; import/bulk scripts forgetting to set slug.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/a4e5e86da46948bb. Report an issue: GitHub.