Imported from bhgroupai/shop_assistant (
.claude/skills/shop-assistant-board/SKILL.md). Install upstream withnpx skills add bhgroupai/shop_assistant --skill shop-assistant-board. Copyright stays with the author.
Shop Assistant — sprint board
The backlog for shop_assistant/ lives in Notion. Follow Order top to bottom and you are always unblocked.
Ids (verify with notion-fetch if a call fails)
| Thing | Value |
|---|---|
| Project page | 3ddb8d1c-364a-814b-9002-fc1e5ee85282 — https://app.notion.com/p/3ddb8d1c364a814b9002fc1e5ee85282 |
| SRS sub-page | 3ddb8d1c-364a-81da-95c0-eeefb6ae7e72 (digest; source of truth is shop_assistant/docs/shop_assistant_SRS.md) |
| SDD sub-page | 3ddb8d1c-364a-8109-ba7a-c5c77e23104d (digest; source is shop_assistant/docs/shop_assistant_SDD.md) |
| Board database | 96fa75417b274b1395abe219e3bd5c3b — https://app.notion.com/p/96fa75417b274b1395abe219e3bd5c3b |
| Data source | collection://c386dd00-19e7-4a53-9944-9b692e9a89da — what queries take |
| Views | Do Next view://3ddb8d1c-364a-81f9-aee7-000c5bc40eba · By Sprint …81a3-9199-000ce26b364f · MVP Board …81b4-80ba-000ce4079ce2 · By Epic …811e-a087-000c79c5549a |
Schema
Name title · Order number (dependency sequence, primary sort) · Sprint S1/S2/S3/R2 backlog · Release MVP/R2 · Status To Do/In Progress/Done · Epic E1 Setup/E2 Ingest/E3 Search/E4 Agent/E5 Bot/E6 Eval & Deploy · Est (days) · Req FR/NFR/AC ids · Blocks plain words · Description one line · Owner Sanjar/Abdurauf/Artur (juniors; Sanjar ≠ Sanjarbek — Sanjarbek is the user/senior who writes tests and reviews) · Track A Search/B Ingest/C Agent/Bot.
Ticket body (junior-ready, since 2026-09-16): ## Scope (Goal, Needs, Files you touch) · ## Steps (numbered, each with a command + expected output; describe the approach in prose — library, function names, key params, docs to read — never paste implementation code; juniors have no access to telegram_digest) · ## Acceptance criteria · ## Prompt for your agent (paste-ready) · ## Notes / Watch out. Shared rules live in docs/WORKFLOW.md in the repo. New tickets must follow this body.
Queries (notion-query-data-sources, SQL mode, table = the data source url)
What's next:
SELECT "Order", "Name", "Epic", "Est (days)", "Req" FROM "collection://c386dd00-19e7-4a53-9944-9b692e9a89da"
WHERE "Release" = 'MVP' AND "Status" != 'Done' ORDER BY "Order" LIMIT 3
What's next for one person: add AND "Owner" = 'Artur'.
MVP progress:
SELECT "Status", COUNT(*) n, SUM("Est (days)") days FROM "collection://c386dd00-19e7-4a53-9944-9b692e9a89da"
WHERE "Release" = 'MVP' GROUP BY "Status"
Mark done: notion-update-page with command: update_properties, properties: {"Status": "Done"} on the ticket page id (get it from SELECT url, "Name" … WHERE "Order" = N).
Insert a ticket between 7 and 8: create with Order 7.5 — never renumber the rest.
Decisions behind the plan (do not undo silently)
- Order 2 is the gating ticket — Product schema +
textnormare frozen first because extract, index, search and eval fixtures all depend on them; changing later means re-extracting every post. - Local models only (SRS C-2 v0.4, 2026-09-17) — Ollama on the Codeschool GPU server (
gemma4:31bfor LLM/tool calling,bge-m3for embeddings), reached via LAN192.168.0.218:11434or ssh tunnel; Anthropic SDK pointed at it byconfig.py. No Claude/Voyage keys anywhere. Deploy target = Codeschool. Server details: servers-docs skill → Codeschool Server/ai/ollama.md. - Order 3 (Ollama spike) sits before any code that uses the models — verifies cross-script similarity (D-3) and forced
tool_choicethrough Ollama's Anthropic-compatible endpoint (D-2).bge-m3must be pulled on the server first. If either fails, revisit SDD before tickets 5/8/10. - Filters first, semantic fallback (SDD D-1) — tickets 7 then 8, in that order; the misses from 7 become the semantic-only eval questions in 11.
- Eval questions (11) are written before agent.py (10) is finished — otherwise they get biased toward what already passes.
- R2 = FR-22 FAQ store, FR-26 /stats + /reindex, cron ingestion — the user agreed on 2026-09-16 to defer them; MVP must still pass AC-1…AC-6 without them.
- Three juniors since 2026-09-16, each with an AI agent —
Owner+Trackcolumns. Tracks run in parallel because every module exists as a stub with SDD signatures (commitfad4eb4):- A Search — Sanjar: 2 → 7 → 8 → 9
- B Ingest — Abdurauf: 3 → 4 → 5 → 6
- C Agent/Bot — Artur: 10 → 11 → 12 → 13 → 14 → 15 (10 starts against stubs; 12 needs 7/8 + data)
Cross-track handoffs written into the tickets: #13 needs
agent.last_runfrom #10; #9 adds a one-lineescalate_syncstub to bot.py for #14.
- Test flow (decided 2026-09-17, user's deliberate choice — not the mainstream "implementer writes tests"): a senior writes a ticket's tests on branch
t<N>-<name>(pushed to origin), assigns it; the junior implements on that branch and never editstests/; PR tomain; CI (.github/workflows/ci.yml: pytest + a job that fails iftests/changed without labeltests-by-senior) + senior review; merge.mainholds tests only for merged work — no pre-written suite on main, no xfail markers. Branch is created at hand-out time (decided 2026-09-17): when a ticket moves to In Progress — and only when its dependencies are Done — cutt<N>-<name>from currentmain, add that ticket's test file, push, tell the junior. Never pre-create branches (they go stale and need rebasing, which forces juniors to reset). Prepared test files live in the session scratchpadtests/(test_extract, test_index, test_search_semantic, test_tools, test_agent, test_eval, test_bot, test_bot_escalation) — regenerate from the ticket's acceptance criteria if lost. #3/#11/#15 have no tests; junior creates the branch. Rules for juniors:docs/WORKFLOW.md. - Planned evolution: once juniors are trusted, senior writes 2–3 acceptance tests and juniors add unit tests in the PR. Don't propose it before the user asks.
- Ticket 1 is Done (scaffolding commit).
- Branch protection on
main(PR required, CI checkstests+tests-untouched, 1 approval) must be set in the GitHub UI —ghis not installed on this machine.
When a ticket is finished
- Set
Status = Donein Notion. - If the work changed a requirement or design decision, update the repo doc (SRS/SDD change log) first, then the Notion digest page.
- Run the "What's next" query and tell the user the next ticket's name, estimate and its Notes / Watch out section.