Wiki Authority & Build Rules

Part of: Pickatale Master Build Wiki | Version: v1.8 | Last Updated: 2026-04-18

This page governs the wiki itself. Read it before using any other section as a build spec.

v1 Platform Scope (Sig Dug, 2026-04-18 β€” Non-Negotiable): Pickatale v1 is school-first only. B2C is out of scope. See Section 0 below.


0. v1 Platform Scope Decision

Decision owner: Sig Dug | Date: 2026-04-18 | Status: βœ… CONFIRMED β€” Non-Negotiable

What is IN scope for v1

What is OUT of scope for v1

Removed feature Reason
B2C parent self-registration v1 is school-first
Parent-created child accounts School owns the learner record
Consumer/parent subscription tier (parent_paid) No direct consumer billing in v1
Parent-first onboarding wizard Parent is a secondary linked observer, not a primary user
Parent creating a duplicate learner record Explicitly prohibited β€” parent links to existing school record only
B2C entitlement resolution path No parent_paid tier in v1 ENUM

Parent role in v1 (Confirmed)

Parents are secondary linked observers, not primary account owners.

Parent CAN in v1:

Parent CANNOT in v1:

Child identity rule

The child account is created exclusively by the school/teacher flow. This is the canonical learner record. Parent linking attaches to this existing record. It must never create a second child profile.

Entitlement rule

Only teacher-license entitlement exists in v1. The parent_paid, school_paid, and class_paid tiers are removed from the v1 subscription ENUM. Tiers in v1: free, trial, teacher_paid, enterprise, gifted.


1. Approved Source Set

This wiki is built from exactly four approved sources. No other sources are authoritative.

Tag Source What it covers
(A) https://demo.readingtester.com/projects.html Project list, high-level descriptions
(B) https://plan.readingtester.com Architecture diagrams, module specs, flow sketches
(C) https://demo.readingtester.com/pickatale-learning-platform.html Product vision, feature list
(D) Sig direct instruction (this chat, 2026-03-24 onwards) Non-negotiable product rules, design decisions
(E) Code audit (2026-04-18) Ground-truth of what is actually built and running

Anything not tagged with one of these five sources is either UNVERIFIED or must be removed.

What is NOT an approved source

If a requirement has no source tag, treat it as UNVERIFIED until it can be assigned one.


2. Single Source of Truth [V1-PRODUCTION]

This wiki is the single source of truth for all Claude Code agents. Every rule is final. There is no precedence hierarchy between sections β€” all content is current and authoritative. If two sections appear to conflict, the more specific (lower-level) rule applies to that specific domain.

Rule: If this wiki does not define it, do not build it. Do not infer default behavior from similar products. Undefined = spec gap = stop and flag, do not implement.

3. v1 Production Behavior [V1-PRODUCTION]

These are the confirmed production behaviors for v1. They are not temporary or MVP-only β€” they are the correct behavior for the current scope. If scale requirements change, decisions will be revisited and this wiki updated.

4. Hard Product Decisions β€” All Resolved for v1

All decisions below are final. Claude Code must implement the [V1 Rule] exactly. Do not re-open these.

OQ-1: One Child, One Class β€” or Many?

V1 Rule [V1-PRODUCTION]: Many-to-many via class_memberships table. DECISION-01 in the decisions register. A child can belong to multiple classes. Each class independently capped at 33 active students. The single students.class_id FK design is rejected β€” use class_memberships.


OQ-2: Teacher/Parent Ownership Transfer Rules

V1 Rule [V1-PRODUCTION]:


OQ-3: Parent Claim Approval Rules

V1 Rule [V1-PRODUCTION]: Teacher must approve each parent claim. Auto-approve after 7 days if teacher has not acted (prevents permanent blocking). School admin can also approve (not just class teacher).


OQ-4: School as Tenant Boundary

V1 Rule [V1-PRODUCTION]: School is the tenant. school_id scopes all data. Teacher who teaches at two schools needs two accounts in v1. The memberships table in Section 38 DDL is reserved for future multi-school teacher support β€” do not implement multi-school teacher logic in v1. Flows in Section 30 (single school per teacher) are correct for v1.


OQ-5: Free-Tier Fallback on Entitlement Failure

V1 Rule [V1-PRODUCTION]: On checkEntitlement() failure β†’ use last-known cached tier (60s TTL). Only fall back to free after 3 consecutive failures. Never block reading regardless of tier. Block premium features (quizzes, bot, adaptive leveling) only after confirmed free resolution. Write to audit_log on every fallback.


OQ-6: Night Theme Availability

V1 Rule [V1-PRODUCTION]: Night theme available in portrait Aa panel (already implemented in ReaderPage.tsx). Include in landscape reading modes panel as well. Night theme is opt-in β€” default is white/day theme.


5. Decisions Register β€” All Resolved for v1

All decisions below are final and locked for v1. Claude Code must implement the V1 Rule column exactly. Do not treat any of these as open.

IDTopicV1 Rule (FINAL)Tag
DECISION-01One child in multiple classes?YES β€” many-to-many via class_memberships. Each class independently capped at 33.[V1-PRODUCTION]
DECISION-02Entitlement unit?Per teacher (teacher_licenses). One license covers all classes owned by that teacher.[V1-PRODUCTION]
DECISION-03B2C parent self-registration?NOT IN V1. Out of scope. Do not build any B2C signup or parent-paid path.[LEGACY / DO NOT IMPLEMENT]
DECISION-04Tenant boundary?School is the tenant. All queries filter by school_id. Teachers cannot access other schools.[V1-PRODUCTION]
DECISION-05Canonical tiers?free, trial, teacher_paid, enterprise, gifted. These are the only valid ENUM values. No aliases.[V1-PRODUCTION]
DECISION-06Billing model?TEACHER-LICENSE: 1 teacher = 1 Stripe subscription, unlimited classes, 33 students/class hard cap.[V1-PRODUCTION]
DECISION-07Parent portal before child reads?YES β€” parent can access immediately after linking.[V1-PRODUCTION]
DECISION-08Multiple parents per child?NO β€” one parent per child. Error: CHILD_ALREADY_CLAIMED.[V1-PRODUCTION]
DECISION-09Parent self-remove?NO β€” only school_admin or platform_admin can unlink.[V1-PRODUCTION]
DECISION-10Parent PIN reset?NOT IN V1. Only teacher/school_admin can reset child PIN. Do not build parent PIN reset endpoint.[V1-DEFERRED β€” DO NOT IMPLEMENT]
DECISION-11Book completion notifications?YES β€” push/email to linked parent. Opt-out in parent settings.[V1-PRODUCTION]
DECISION-12Parent sees class data?NO β€” child's own data only. No class lists or other students.[V1-PRODUCTION]
DECISION-13Parent-visible data scope?Books read, miles, reading level, recent activity only. No bot reasoning, no vocab gaps, no other students.[V1-PRODUCTION]
DECISION-14Per-student COPPA consent?NOT IN V1 school path. School DPA covers all enrolled students. No platform-side consent gate.[V1-DEFERRED β€” DO NOT IMPLEMENT]

6. Source Hygiene Log

The following content was present in earlier wiki drafts and has been removed or quarantined as non-authoritative:

Content Source it came from Action
B2C self-registration flows Earlier wiki drafts (pre-2026-04-18) Removed from v1 scope β€” confirmed out of scope by Sig 2026-04-18
parent_paid subscription tier Earlier entitlement design Removed from v1 ENUM β€” no consumer billing in v1
Parent-created child accounts Earlier flows D (B2C) Removed β€” child accounts created by school/teacher only
GraphRAG inferences (FR-029–031 original versions) Internal GraphRAG knowledge graph Removed β€” FR-029–031 were reassigned to Source (D) Sig direct instruction where confirmed
Any requirement inferred from "common practice" without a source tag None Removed β€” replaced with UNVERIFIED tag pending source assignment
References to internal tool names in wiki content (memory_search, MEMORY.md paths) Internal agent infrastructure Never in wiki β€” confirmed absent

Current state: All requirements in Sections 28–47 have at least one of the five approved source tags. Sections 1–27 retain their original source tags for audit history. UNVERIFIED items are explicitly tagged and must not be built until a source is assigned.