Employee Onboarding

L3
ModelContextProtocolNotionCompany In A Box

Build an integrated Employee Onboarding system for the existing Company In A Box page with a checklist database, onboarding hub, and feedback form.

Created by Zijian Wu
2025-07-27
Database ManipulationTemplate PopulationCross Reference LinkingStatus Tracking

Model Ranking

Click on the dots to view the trajectory of each task run
Model
Run Results
Pass@4
Pass^4
Avg Time
Avg Turns
Input Tokens
Output Tokens
Total Tokens
OpenAI
gpt-5-nano-medium
4
/4
436.3s
11.8
183,315
96,824
280,139
OpenAI
gpt-5-high
1
/4
1477.4s
13.3
277,719
66,491
344,209
OpenAI
gpt-5-mini-medium
1
/4
161.0s
16.3
252,166
13,115
265,281
OpenAI
gpt-5-nano-high
1
/4
506.3s
10.8
182,982
104,465
287,446
OpenAI
gpt-oss-120b
1
/4
18.5s
3.8
17,594
1,545
19,139
MoonshotAI
kimi-k2-0711
1
/4
353.1s
34.3
1,088,068
4,020
1,092,088
OpenAI
o3
1
/4
148.9s
12.3
117,940
7,804
125,744
OpenAI
o4-mini
1
/4
646.6s
18.8
151,235
38,464
189,699
Claude
claude-opus-4-1
0
/1
--
482.6s
15.0
400,292
7,548
407,840
Claude
claude-sonnet-4
0
/4
278.1s
24.3
748,930
5,262
754,192
Claude
claude-sonnet-4-high
0
/4
175.4s
18.5
767,540
5,693
773,232
Claude
claude-sonnet-4-low
0
/4
220.8s
20.3
1,499,280
4,765
1,504,044
DeepSeek
deepseek-chat
0
/4
249.6s
17.0
353,128
3,061
356,189
Gemini
gemini-2-5-flash
0
/4
61.4s
9.3
67,488
8,870
76,358
Gemini
gemini-2-5-pro
0
/4
169.4s
12.0
300,883
11,279
312,162
Z.ai
glm-4-5
0
/4
258.8s
29.0
742,886
6,379
749,264
OpenAI
gpt-4-1
0
/4
89.7s
12.5
149,831
3,022
152,853
OpenAI
gpt-4-1-mini
0
/4
69.4s
10.3
78,558
2,540
81,098
OpenAI
gpt-4-1-nano
0
/4
35.2s
11.3
76,621
1,288
77,909
OpenAI
gpt-5-low
0
/4
813.7s
17.8
771,802
36,057
807,859
OpenAI
gpt-5-medium
0
/4
502.1s
9.5
198,835
31,455
230,291
OpenAI
gpt-5-mini-high
0
/4
376.8s
21.8
391,045
35,851
426,896
OpenAI
gpt-5-mini-low
0
/4
252.6s
10.0
131,305
7,418
138,723
OpenAI
gpt-5-nano-low
0
/4
116.3s
7.0
45,624
20,571
66,195
Grok
grok-4
0
/4
313.9s
18.0
338,470
12,652
351,123
Grok
grok-code-fast-1
0
/4
555.9s
22.8
598,032
5,920
607,887
MoonshotAI
kimi-k2-0905
0
/4
265.0s
24.5
353,971
3,294
357,265
Qwen
qwen-3-coder-plus
0
/4
82.8s
16.8
319,357
2,382
321,739
Qwen
qwen-3-max
0
/4
197.7s
23.3
402,002
4,301
406,303

Task State

Notion Workspace
This task is executed based on this Notion workspace
This workspace is cloned from notion official template marketplace.View Original Template

Instruction

Build an integrated Employee Onboarding system for the existing Company In A Box page.

Task Requirements:

  1. Create a new database titled Employee Onboarding Checklist with the following properties exactly: • Employee Name – title
    Start Date – date
    Department – select (options: Product, Marketing, Sales, HR, Engineering)

    Populate this database with 3 sample new-hire pages covering three different departments. Every property in each entry must be filled.

  2. Under the top-level page Company In A Box, create a new child page titled Onboarding Hub containing, in order:

    1. The Employee Onboarding Checklist database embedded at the top.
    2. A section headed Benefits Overview that includes linked mentions (@-mentions or link-to-page blocks) to ≥ 3 distinct benefit-policy pages from the Company Wiki (for example Benefits policy, Vacation Policy, Corporate travel).
    3. A section headed 30-Day Timeline that presents a numbered list with 7 steps covering the first 30 days. Each step must reference (via @-mention) an existing page or database.
    4. A section headed Feedback Form that provides ≥ 3 to-do items for new hires to check off.


Verify

*.py
Python
import sys
from typing import Dict, Set
from notion_client import Client
from tasks.utils import notion_utils


def _check_db_schema(db_props: Dict[str, Dict], required: Dict[str, str]) -> bool:
    """Return True if every required property exists with the correct type."""
    for prop_name, expected_type in required.items():
        if prop_name not in db_props:
            print(
                f"Error: Property '{prop_name}' missing from database.", file=sys.stderr
            )
            return False
        actual_type = db_props[prop_name]["type"]
        if actual_type != expected_type:
            print(
                f"Error: Property '{prop_name}' has type '{actual_type}', expected '{expected_type}'.",
                file=sys.stderr,
            )
            return False
    return True


def verify(notion: Client, main_id: str | None = None) -> bool:  # noqa: C901
    """Programmatically verify the onboarding system described in description.md."""

    DB_TITLE = "Employee Onboarding Checklist"
    HUB_PAGE_TITLE = "Onboarding Hub"
    DEPARTMENT_OPTIONS: Set[str] = {
        "Product",
        "Marketing",
        "Sales",
        "HR",
        "Engineering",
    }
    REQUIRED_DB_PROPERTIES = {
        "Employee Name": "title",
        "Start Date": "date",
        "Department": "select",
    }

    # 1. Locate onboarding database
    db_id = notion_utils.find_database(notion, DB_TITLE)
    if not db_id:
        print(f"Error: Database '{DB_TITLE}' not found.", file=sys.stderr)
        return False

    try:
        db_obj = notion.databases.retrieve(database_id=db_id)
    except Exception as exc:
        print(f"Error retrieving database: {exc}", file=sys.stderr)
        return False

    db_props = db_obj.get("properties", {})
    if not _check_db_schema(db_props, REQUIRED_DB_PROPERTIES):
        return False

    # Extra: validate select options
    dept_options = {opt["name"] for opt in db_props["Department"]["select"]["options"]}
    if not DEPARTMENT_OPTIONS.issubset(dept_options):
        print(
            f"Error: Department select options must include {sorted(DEPARTMENT_OPTIONS)}. Current: {sorted(dept_options)}",
            file=sys.stderr,
        )
        return False

    # Check there are at least 3 entries in the database
    try:
        db_pages = notion.databases.query(database_id=db_id).get("results", [])
    except Exception as exc:
        print(f"Error querying database: {exc}", file=sys.stderr)
        return False
    if len(db_pages) < 3:
        print(
            "Error: Less than 3 onboarding entries found in the database.",
            file=sys.stderr,
        )
        return False

    # 2. Locate Onboarding Hub page
    hub_page_id = notion_utils.find_page(notion, HUB_PAGE_TITLE)
    if not hub_page_id:
        print(f"Error: Page '{HUB_PAGE_TITLE}' not found.", file=sys.stderr)
        return False

    # 3. Ensure the onboarding database is embedded in the hub page
    embedded_db_id = notion_utils.find_database_in_block(notion, hub_page_id, DB_TITLE)
    if embedded_db_id != db_id:
        print(
            "Error: The Employee Onboarding Checklist database is not embedded in the Onboarding Hub page.",
            file=sys.stderr,
        )
        return False

    # 4. Analyse blocks within the hub page for linked mentions, timeline, and feedback form
    all_blocks = notion_utils.get_all_blocks_recursively(notion, hub_page_id)

    seen_link_targets: Set[str] = set()
    numbered_list_count = 0
    todo_count = 0

    for blk in all_blocks:
        blk_type = blk.get("type")

        # Direct link-to-page blocks
        if blk_type == "link_to_page":
            info = blk.get("link_to_page", {})
            target_id = info.get("page_id") or info.get("database_id")
            if target_id:
                seen_link_targets.add(target_id)
            continue

        # Rich-text mentions inside content blocks
        if blk_type in {
            "paragraph",
            "numbered_list_item",
            "bulleted_list_item",
            "to_do",
        }:
            content = blk.get(blk_type, {})
            for rt in content.get("rich_text", []):
                if rt.get("type") == "mention":
                    mention = rt.get("mention", {})
                    if mention.get("type") in {"page", "database"}:
                        target_id = mention.get("page", {}).get("id") or mention.get(
                            "database", {}
                        ).get("id")
                        if target_id:
                            seen_link_targets.add(target_id)

        # Count numbered list items
        if blk_type == "numbered_list_item":
            numbered_list_count += 1

        # Count to-do items in Feedback Form
        if blk_type == "to_do":
            todo_count += 1

    if len(seen_link_targets) < 3:
        print(
            "Error: Fewer than 3 linked mentions to benefit policy pages found in the Benefits Overview section.",
            file=sys.stderr,
        )
        return False

    if numbered_list_count < 7:
        print(
            "Error: Numbered list contains fewer than 7 steps in the 30-Day Timeline section.",
            file=sys.stderr,
        )
        return False

    if todo_count < 3:
        print(
            "Error: Feedback Form section contains fewer than 3 to-do items.",
            file=sys.stderr,
        )
        return False

    print(
        "Success: Verified Employee Onboarding Checklist database, Onboarding Hub page, and all required sections."
    )
    return True


def main():
    notion = notion_utils.get_notion_client()
    main_id = sys.argv[1] if len(sys.argv) > 1 else None
    if verify(notion, main_id):
        sys.exit(0)
    else:
        sys.exit(1)


if __name__ == "__main__":
    main()