{
  "schemaVersion": "1.0",
  "status": "PROPOSED future interface; NOT existing API routes; NO AI/STT provider selected",
  "preview": "deterministic local example handlers, no external calls or real audio",
  "interfaces": {
    "parse": {
      "input": {
        "actorContext": "server-derived capabilities; never user role strings",
        "scope": "household ID + visibility epoch; role-scoped DTO allowlist",
        "utterance": "edited text or explicit user-reviewed transcript",
        "contextRevision": "canonical household revision"
      },
      "output": "read result | one precise clarification | typed proposal | unavailable/permission refusal"
    },
    "proposal": {
      "required": [
        "proposal_id",
        "actor_id",
        "household_id",
        "visibility_epoch",
        "input_revision",
        "entity_versions",
        "entitlement_versions",
        "expires_at",
        "commands",
        "before_after",
        "draft_hash"
      ],
      "commands": "allowlisted typed command payloads, never prose/eval/SQL",
      "resolution": "Stable same-home IDs; ambiguous name/person/room/date must clarify",
      "editPolicy": "Every edit invalidates confirmation; revalidate and rehash current payload"
    },
    "confirm": {
      "input": [
        "proposal_id",
        "draft_hash",
        "explicit_confirmation",
        "bound_actor_id",
        "bound_scope_revision"
      ],
      "output": "confirmed draft or stale/forbidden/validation error",
      "invariant": "No writes before explicit user confirmation of exact current draft"
    },
    "apply": {
      "input": "frozen command IDs/keys/bodies + confirmation record",
      "dispatch": "Only existing capability/validation/version/idempotency APIs; server authority per command",
      "output": "Per-command confirmed|pending|conflict|retry|forbidden; never blanket success",
      "partialPolicy": "Keep canonical results for succeeded commands; same key/body retry only retryable commands; changed intent new review and confirm"
    }
  },
  "commands": [
    {
      "intent": "read_chores",
      "existingApiRef": "GET /v1/households/{hid}/today",
      "permission": "A/C role-scoped",
      "invariant": "No mutation; child own only",
      "writes": false,
      "confirmationRequired": false
    },
    {
      "intent": "create_task",
      "existingApiRef": "POST /v1/households/{hid}/tasks",
      "permission": "E",
      "invariant": "Validate room, effort, recurrence, first due, eligible IDs",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "edit_task",
      "existingApiRef": "PATCH /v1/households/{hid}/tasks/{tid}",
      "permission": "E",
      "invariant": "expected_version; current occurrence snapshot unchanged",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "create_space",
      "existingApiRef": "POST /v1/households/{hid}/rooms",
      "permission": "E",
      "invariant": "Preset icon/name; same-home scope",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "edit_space",
      "existingApiRef": "PATCH /v1/households/{hid}/rooms/{rid}",
      "permission": "E",
      "invariant": "expected_version; archive requires task disposition separately",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "set_recurrence",
      "existingApiRef": "PATCH /v1/households/{hid}/tasks/{tid}",
      "permission": "E",
      "invariant": "intervalDays>0 or nonempty weekdays1..7; accepted-day anchor",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "set_assignment",
      "existingApiRef": "PATCH /v1/households/{hid}/tasks/{tid}",
      "permission": "E",
      "invariant": "fixed/round_robin; active eligible IDs; child task-scoped approval",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "snooze",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/snooze",
      "permission": "E or assigned A",
      "invariant": "until_local_date; open only; preserve anchor",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "reassign",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/reassign",
      "permission": "E",
      "invariant": "eligible target, not pending; invalidate old child visibility",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "schedule_preview",
      "existingApiRef": "POST /v1/households/{hid}/schedule/preview",
      "permission": "E+verified auto_schedule",
      "invariant": "Read deterministic forecast, no write; bounded date window",
      "writes": false,
      "confirmationRequired": false
    },
    {
      "intent": "schedule_apply",
      "existingApiRef": "POST /v1/households/{hid}/schedule/apply",
      "permission": "E+verified auto_schedule",
      "invariant": "Explicit confirmation, revisions/preferences/algorithm/choices/window; pending/fixed locked",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "complete_own",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/complete",
      "permission": "A assigned=self",
      "invariant": "expected_version; server performer/accepted timestamp/ledger",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "submit_own",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/complete",
      "permission": "C assigned=self + active device/G",
      "invariant": "awaiting_approval; no points",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "guardian_approve",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/approve",
      "permission": "G exact child",
      "invariant": "latest submission ID+version; exact guardian; explicit confirm",
      "writes": true,
      "confirmationRequired": true
    },
    {
      "intent": "guardian_reject",
      "existingApiRef": "POST /v1/households/{hid}/occurrences/{oid}/reject",
      "permission": "G exact child",
      "invariant": "required reason/latest submission; needs_redo no points",
      "writes": true,
      "confirmationRequired": true
    }
  ],
  "confirmationInvariants": [
    "Bind actor, household, visibility epoch, entity versions, household revision and entitlement/grant version",
    "Each write command key generated before first dispatch and retained through retry",
    "Replayed same actor/key/body produces same canonical receipt, no duplicate points",
    "Stale proposal -> refresh canonical scoped data -> regenerate diff -> user confirms again",
    "Never execute prose, eval code, issue raw DB writes, set role/points/Pro or bypass child review",
    "Guardian is independent from ownership; only active relation to exact child",
    "Child sees only own assignments/history and relevant room instructions; no contacts/invite/billing/other-household context",
    "Child voice transcripts follow same allowed context and explicit confirmation",
    "Revoked scope stops queue and hides cache before navigating"
  ],
  "voice": {
    "states": [
      "rationale",
      "denied",
      "listening",
      "stopped",
      "transcribing",
      "editable",
      "clarifying",
      "proposal",
      "cancelled",
      "failed"
    ],
    "never": "Silently submit raw speech, ask provider credentials, actual recording in preview",
    "nativeGap": "OS permission prompt and recorder/STT adapter not implemented"
  },
  "commercial": {
    "provider": null,
    "sttProvider": null,
    "aiCommercialGate": null,
    "prices": null,
    "quotas": null,
    "scheduleGate": "existing verified household Pro feature; AI never unlocks"
  },
  "previewAdapterMap": {
    "warning": "Local command fields are reference models, not API wire bodies. Implementing agent maps and validates before dispatch.",
    "create-task": {
      "room": "room_id",
      "firstDue": "first_due_local_date",
      "assignment": "assignment_mode",
      "fixed": "fixed_assignee_member_id",
      "eligible": "eligible_member_ids",
      "recurrence": "unchanged {kind:interval,intervalDays} or ISO weekdays1..7",
      "effort": "effort"
    },
    "edit-task": "TaskPatchInput: expected_version + editable template fields; never first_due_local_date/anchor/childApproved/points",
    "complete": "CompleteInput expected_version + optional client_performed_at; API chooses performer",
    "approve/reject": "GuardianReviewInput expected_version + latest submission_event_id from canonical ChildOccurrenceDto; reason required for reject",
    "snooze": "SnoozeInput expected_version + until_local_date",
    "reassign": "ReassignInput expected_version + target_member_id",
    "schedule": "ScheduleApplyInput: PreviewInput + input_revision/household_version/algorithm_version/choices; server recomputes exact date window",
    "child-profile": "ChildCreateInput nickname/avatar_key/guardian_member_id/consent_confirmed/policy_version",
    "notifications": "Existing NotificationPreferencesInput supports enabled,locale,quiet_start_local,quiet_end_local,expected_version; type toggles pending contract extension"
  },
  "knownIntegrationGaps": [
    "No actual AI parse/confirm/apply server routes exist here",
    "Provider/STT/privacy retention/commercial gating and policies require product decisions",
    "Native role-scoped composer, mic, STT and secure proposal/outbox storage require implementation",
    "Local prototype uses deterministic revision/receipt guards, not cryptographic auth or remote authority"
  ],
  "sourceAuthority": [
    {
      "path": "docs/product-brief.md",
      "workspace": "MobileApps (read only)",
      "sha256": "bbbda0a27d4f00ff2a916e76b5d0ee0c14c53e229022ad6f1cf2a83e982f28bb",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "plans/261013-1409-sweepy-vietnam-mobile/mobile-flows.md",
      "workspace": "MobileApps (read only)",
      "sha256": "893872820bff394c6ed4e4b4a0788b3b1935403a0ddd51a4849e3bc6e88f0e4a",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "plans/261013-1409-sweepy-vietnam-mobile/api-contracts.md",
      "workspace": "MobileApps (read only)",
      "sha256": "9aa289eb1cd57fe68888fd2f1e906e36bee846768a43460e6911532b914e5cf9",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "packages/domain/src/contracts/phase2.ts",
      "workspace": "MobileApps (read only)",
      "sha256": "e17d83f0aafbf7bf485e34ce11852a9db3cfdc4a64e89e1cc64f8eb7770759ba",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "packages/domain/src/index.ts",
      "workspace": "MobileApps (read only)",
      "sha256": "7426aa0c5d0743573860e894679d003c0f5ed9a941d8b9edf72198a7323fbb89",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "packages/domain/src/contracts/phase3.ts",
      "workspace": "MobileApps (read only)",
      "sha256": "3c415bb2c4f0b7fc5daa129c341fb04fd99e240d71267f3a4ab8a9a45e5b86ff",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "packages/domain/src/contracts/billing.ts",
      "workspace": "MobileApps (read only)",
      "sha256": "b4806a92bbed38fa080c4861dae8cdd5f8ed395336bad677b4a7a4174bc79746",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "apps/mobile/src/lib/api.ts",
      "workspace": "MobileApps (read only)",
      "sha256": "88674cc2d8a2e516d8071019035a4235325552a22a2f964bcec62b2d78c7f479",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "plans/261014-1209-complete-mobile-design/design-brief.md",
      "workspace": "MobileApps (read only)",
      "sha256": "ac6702b171d9be5dc426cafdc81311e89485a3c7a268b2432031abd555301bdc",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "plans/261014-1209-complete-mobile-design/required-screens.json",
      "workspace": "MobileApps (read only)",
      "sha256": "6f00c9e67dbf1e8d993348324d4289bb909bc34ab417da70d986dc3519ebc6cc",
      "authority": "current source snapshot, not deployment evidence"
    },
    {
      "path": "plans/261014-1209-complete-mobile-design/screen.schema.json",
      "workspace": "MobileApps (read only)",
      "sha256": "8acb9e137a9440f06b9415c18d3106daeefd8b5d6290635231c42137c095340a",
      "authority": "current source snapshot, not deployment evidence"
    }
  ]
}
