The headline acceptance gate: an unfamiliar developer, working only from the docs, builds and runs a worker. This protocol scripts that test and captures what to fix. See
DOCS_ACCEPTANCE_CRITERIA.mdfor the full criteria.
A developer new to VGI, working unaided from the published docs, reaches a custom scalar AND table function callable from DuckDB in ≤20 minutes.
"Callable from DuckDB" means both:
SELECT greetings.greeting('Alice')returnsHello, Alice!, andSELECT * FROM greetings.greeting_series(3)returns 3 rows.
- Comfortable writing Python; has not used VGI before.
- A mix is ideal across runs: at least one participant new to DuckDB extensions, and at least one new to Apache Arrow (this is the "serve all" audience we're validating).
- Has Python 3.13+ and
uvinstalled (or we install them first, off the clock).
- Do not help. Point the participant at the docs home page and the timer; then observe in silence. Answer only "I can't help with that — what would you try?"
- Record the clock at each milestone and every point of confusion verbatim.
- Capture the participant's words ("I don't know what a catalog is here") — those become doc fixes.
- Start screen recording (or take notes) and the timer.
- Give the participant only this: "Using the vgi-python docs, build a worker that adds two functions to DuckDB — one that greets a name, and one that generates a series of greetings — and run both from SQL. Start at the docs home page."
- Observe until success or 30 minutes elapsed (let them run past 20 so we learn where the tail is).
- Debrief: what was confusing, what was missing, what they expected to find and didn't.
| Milestone | Time | Notes |
|---|---|---|
| Found the tutorial / starting point | ||
| Worker file written | ||
| SQL engine launched (Haybarn or DuckDB) | ||
Worker attached (ATTACH …) |
||
| Scalar query returned a result | ||
| Table query returned rows | ||
| Total time to success (or DNF) |
| # | Where (page / step) | What happened | Severity (block/slow/nit) | Fix |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 |
- Passed (≤20 min, unaided, both functions) — participant: ____________ time: ______
- Did not pass — root cause: ____________________________________________
Every block/slow stumble must produce a doc fix (or an explicit waiver) before sign-off.
| Date | Participant background | Result | Time | Fixes filed |
|---|---|---|---|---|