← All privacy impact assessments

PIA: The home brief — one paragraph for the group, written twice a day

Amended 4 October 2026. Every edition is written by Gemini 3.5 Flash-Lite at Vertex global, for every group that is not Device-only, with real names; the Sydney route and the sensitive-sheet pin described below are gone (cloud-inference §12).

Planned, 10 October 2026: a member may choose to be sent the brief. A member will be able to ask for one notification a day — "Your day in Smiths" — at a time they pick, on their group's clock, which opens Home where the brief already is. It is off unless the member chooses it, and it is offered in two places: while they are setting the app up, and in Settings. Nothing about the brief itself changes: the same paragraph, written the same way, from the same records, for the same groups.

What it collects, and what makes the switch findable. One stored choice — the member's own chosen time — kept as one more of that member's reminders, so it appears in the list of everything they have asked to be reminded about, with its own switch, and goes out through the dispatcher that already sends reminders. The notification itself carries no content: not the brief's words, not a task or event title, not a count. It names the group, and nothing else. Never for a child account, and never for a group that has no brief — a Phones-only group has none, so there is nothing to be sent. A member who never chooses it is never sent anything, and nothing suggests it to them more than the two places above.

Why it does not count towards the limit on unasked notifications. The app is separately being changed to send a small number of notifications nobody asked for, limited to three a day per member. A brief a member chose, at a time they chose, is a promise they made to themselves, like any other reminder, so it sits outside that limit — which also means a member cannot be sent it unless they chose it. Residual risk, accepted: a daily notification is a daily habit this app has not had before, and a member who finds it too much has to find the switch to stop it. It is in the one list that holds every other reminder they have set, which is where they would look.

Status: Accepted on 29 September 2026, with the residual risks in §12, before any of it was built. Built the same day, against this design, and this revision checks the assessment against the code rather than the plan — three places changed (§2, §2.1, §6) and are marked below. Not yet released: the code is on its own branch, and reaches production only when the usual migration-then-deploy-then-OTA release runs. Where this document describes the app as it runs today, before release, it says "today". Written: 27 September 2026 · Last revised: 10 October 2026 (the second amendment at the top: a member may choose to be sent the brief) · 29 September 2026 (checked against the built code) Nothing here is legal advice. Children's Code citations are to the exposure draft; section numbers may move on registration (due 10 December 2026).


0. The short version

Today the top of Home is a short brief written by an AI model for each member separately, in three versions behind Today, Tomorrow and This week tabs. We plan to replace it with:

We accepted this design on 29 September 2026. The finding that matters most for consent — that a group's existing Global choice already covers this use, so no new consent is asked for — is in §8. The residual risks we accept are in §12, together with one defect in today's brief that this change fixes.

1. Purpose and scope

Why build this, in one sentence: to take effort out of planning a group's day by connecting what the group has already recorded — its commitments and the preparation written down for them — in one short paragraph a member can act on.

Today, the brief is written for each member by a model, three times over (Today, Tomorrow, This week), and rewritten when the group's tasks or events change. Members read the first tab and rarely switch, so two of the three are written and not read, and the one that is read cannot see the other two horizons. Each copy is written for one reader and includes that reader's own plan.

The change replaces the three with one shared paragraph per edition, removes the Today / Tomorrow / This week control from Home altogether, and moves everything personal onto the phone.

In scope: what the paragraph is written from (the fact sheet) and what it may never be written from; where it is processed; the writer and the editor; how it is paid for; how it is stored, read, refreshed, withdrawn and deleted; the line composed on the phone; the planned fix to today's brief cache; children.

Out of scope, covered elsewhere and relied on rather than repeated:

What changed from the earlier draft of this assessment (27 September 2026), which assessed a different design and was never published:

2. Data involved

Kind Whose Children's? Sensitive? Free text?
Task titles, due dates and times, who each is assigned to and who created it, whether it was done today (group_tasks, task_completions) the group's; the members named can be — a task about a child, or assigned to a child member can be — a title can name a medical appointment yes, titles
Event titles, start times, lengths, all-day and multi-day spans, who is going (group_schedule_events) the group's can be can be — "Ada — paediatrician" yes, titles
Linked preparation, titles only: the task an event is linked to, tasks it waits on, tasks from the group's active meal plan, and up to three sub-items per task the group's can be can be yes, titles
A routine's title and one derived yes/no — whether today's occurrence is still outstanding — for at most three routines due today (group_tasks's routine columns and routine_last_tick_at; the reminder, rotation and turn columns are not read). For the two shapes a COUNT decides (several a day, N times a week) the derivation also counts this week's own ticks of that routine — from task_completions, the task id, when it happened and whether it was a step of a parent, and never a title; a tick decides this one yes/no and no tick time reaches the sheet, the paragraph or a model the group's can be can be yes, titles
Meal-plan state: tonight's dinner and planned dinners the group's no no dish names from the catalogue
A dated or undated "Grocery Shop" task, read as an ordinary task (not yet the household's own shopping habit — see the note after this table) the group's no no list items are typed; up to three may appear as linked preparation under the shop, like any task's sub-items
Recall — at most four facts, each about an item already on the sheet, from the last 90 days (§2.1) the group's can be — the last time a child's repeating appointment happened can be derived from titles
Member first names and ids members, including child members yes, for a child member no no
Baby names, read only to decide where the brief is processed (§4) and never sent on their own the babies' yes no no
The edition — the paragraph as structured sentences, the facts it cites (ids, kinds, fingerprints, expiry), the ids of the records it rests on, which edition and revision it is, and the privacy level, time zone, route, model and number of passes it was written under (group_brief_editions) the group's derived from the above derived from the above model-written text
Generation leases — which edition is being written, a fencing number, its state, when the lease expires, a cool-down after a failure, and the ids of the records it rests on (brief_generation_leases) the group's no no no
The group's weekly brief money — per group and week: start and end, the time zone when the week opened, the limit, the totals reserved, settled and overrun, and a count of repairs (brief_budget_windows) the group's no no no
Spend attempts — per provider attempt: which edition, writer or editor, provider, model and region, the tokens and money reserved and actually used, and when (brief_spend_attempts) the group's no no no
Platform spend totals — per UTC day, surface and provider, naming no group and no member (inference_spend, existing) ours no no no
On the phone only: the reader's own plan, their own assigned items, events another group invited this group to that the reader is going to, and the counted baby lines behind their two existing switches the reader's own; a baby's yes, for the baby lines the baby lines are health-adjacent the plan is typed

As built: the household's shopping habit — the usual day and the usual shopper — is not yet sent, on either side. The design described a shared "meal-plan and shopping state" fact; the code that builds the sheet, on the phone and on the server, currently passes an empty shopping input rather than a half-built one, because the usual-day/usual-shopper reader is written against the app's own client and has not yet been given the mirrored, no-imports form every other input here has (§10). The group's shop still reaches the paragraph — an ordinary "Grocery Shop" task, dated or not, goes through the same path as any task — it just does not yet carry the extra habit context ("usually Sam") or a dedicated recall of which day the shop usually falls on (§2.1's third recall kind is therefore dormant until that reader is built). Nothing is sent that this document did not already describe as planned; less is sent than was planned. This is a review trigger (§13) once it changes.

Strictly necessary, item by item (exposure draft s 38(2)(b)):

Not collected, and could have been. Each absence is a decision:

2.1 Recall, a closed list

Four kinds, each only for an item already on the edition's sheet, each about the group and naming nobody, from the last 90 days, four facts at most:

  1. The previous occurrence of a repeating event — when the same repeating series last happened. This is how an appointment can be recalled, and only a repeating one: the link is the event's own series, never a similar title.
  2. What was prepared last time — preparation tasks linked to that same series that were completed last time, offered as "last time the checklist included…", never as a current requirement.
  3. The shopping pattern — which day the group's shop usually happens, from completed shopping tasks. Dormant as built (the note after §2's table): it can only ever be offered alongside a shopping fact the sheet does not yet select, so it does not appear in this release.
  4. When a dish was last planned.

Nothing counts how often something has happened ("four visits this year"), and nothing tells a story about a person or a child.

3. Flows and locations

Data Device Supabase (Sydney, ap-southeast-2) Our assistant server (australia-southeast1) Model provider Region
Tasks, events, meal plan, completions, roster read from the phone's own store to decide which sentences are still true (§6) read by our assistant server through the requesting member's own access, under the same row rules as the app the fact sheet is built in memory and not stored there — —
The fact sheet — — names replaced first on the global route (§4) Google Vertex AI: up to two token-counting requests and one generation per pass, two passes at most Sydney; or Vertex's global service at a Global level, for a sheet with no health or baby content
The edition read under its read rule (§7) and held in memory only stored in group_brief_editions, plaintext, with names as member ids never written directly — see "The write path" below — Sydney
Leases, weekly money, attempts never three tables that no member, and no role the app signs in as, can read or write reached only through the write path — Sydney
The personal line composed on the phone from the reader's own data — — — the phone
The phone's own model, for a member who has chosen it given the fact sheet and the reader's own plan, on the phone — — the phone's own model the phone
Operational logs — — counts, timings, token numbers, outcome and validation codes — —

The write path. Our assistant server holds no database key that can write an edition or move money, and it does not gain one. It calls a single function, brief-ledger, on our database provider's function service — the same service our other server-side functions already run on. That function accepts a request only if it carries an identity token signed by Google for our assistant server's own service account, which it checks against Google's published keys (the signature, the issuer, the audience, the exact account, and the expiry), together with the requesting member's own session token, from which the function works out who is asking. It offers three operations and nothing else: begin (take the edition's lease and reserve money for the first attempt), next (record what the previous attempt cost and reserve the next), and finish (record the last cost, then publish the edition or give the lease up). Each is one database function that only the function service can call, and each re-checks the group, the member and the privacy level itself.

What a compromised assistant server could do through this door — stated because it is the bound on the design: reserve and spend brief money, up to each group's weekly limit, and publish text that passes the database's shape checks into the edition of a group whose eligible member's session it holds (a member's session reaches our server with every request they make). It could not read an edition, a lease or a money record through this door beyond the outcome of its own operation, could not name a requester other than the member whose session it presents, could not raise a limit, and could not reach any other table. The function itself holds a key with wide database access, as our other server-side functions on that service already do; that key never reaches our assistant server.

What reaches the model, per edition. A fact sheet of at most 30 short facts, each with a pre-written time label ("tomorrow (Thursday) 8:00 am") and a short id, and a note of how many facts of each kind were left out, so that a missing fact is never mistaken for a quiet week. Free text is fenced as data, with a marker unique to the request, as every other model surface in the app already does. The writer receives the sheet; the editor receives the sheet, the writer's draft (fenced as data too) and our own validation findings as codes. The same text also goes to the same endpoint's token-counting service before each pass, at most twice, so that the money reserved matches the real size of the request; counting is not a generation.

What reaches a log. Counts, timings, token numbers, and outcome and validation codes. No titles, names, member ids, drafts, prompts or brief text.

What crosses a group boundary. Nothing. An event another group invited this group to is left out of the shared paragraph; such an event may appear only in the line of a member who is going to it, composed on their own phone.

At rest. The edition is plaintext in our Sydney database, like the tasks and events it retells. It is not end-to-end encrypted, and no copy may say it is. Member names are stored as ids and turned back into names on the phone, from the current roster, when the brief is shown.

4. Where the model runs, and what it is given

Group's privacy level Does the sheet carry health or baby content? Where both passes run Names
Device-only — nowhere on a server: our servers refuse before reading anything; a phone with its own model may write a brief on the phone —
Australia either way Gemini 2.5 Flash, Vertex AI, Sydney real first names in the prompt; stored as ids
Global, records stay here; Global, everything yes Gemini 2.5 Flash, Vertex AI, Sydney as above
Global, records stay here; Global, everything no Gemini 3.8 Flash, Vertex AI's global service, which may process in any Google region replaced with placeholders ("Member A", "Baby 1") in every fact, in the counting requests, in the writer's prompt, in the draft and in the editor's prompt; restored as member ids afterwards

5. Who pays: the group's weekly brief limit

The figures below are illustrative, worked from our own price records rather than a fresh quote, and are assumptions until measured. A small synthetic comparison of one pass against two is planned before we decide whether the editor stays on each route.

Two-pass edition Australia Global
Expected: 3,500 input and 700 output tokens A$0.00477 A$0.01628
Fourteen expected editions a week A$0.067 A$0.228
Ceiling per edition: 4,000 input and 1,200 output tokens A$0.00716 A$0.02325

6. When a brief is written, how long it lasts, and how it is withdrawn

6.1 Sealed at rest (added 30 September 2026)

From the release that follows 30 September 2026, an edition's words are stored encrypted. The facts it cites, which sentence depends on which, and whether a sentence is about today or the week stay readable, because they are identifiers and flags rather than words.

7. Who can read it, and who can cause it

8. Legal basis, consents and what members are told

Amended 30 September 2026: the daily brief is now a consent purpose of its own. This section first found that no new consent purpose was needed, because the brief's own setting was already treated as consent-class. We have since decided, as part of our work on member types and first-use consents (member types and first-use consents §4.3–§4.4), to make it one, daily_brief, recorded in our consent record like the others and lapsing after twelve months like the others. What changes:

The paragraph this replaces, kept for the record: the member's daily-brief setting is treated as consent-class by our own settings rules, but switching it records no act in our consent ledger; this design keeps the setting and its default, and changes what the setting controls rather than what it collects about the member.

The Global levels: our finding, accepted on 29 September 2026. At a Global level, this brief sends the group's task, calendar and meal records to the global service. The group's existing Global consent — the overseas_processing consent given by an owner or admin of the group (by two members confirming it until 2 October 2026), announced in the group chat and lapsing after twelve months — was given against the level's own description on the privacy screen, which names exactly those records: the organising side of the app, "tasks, calendar, meals, pantry, games and group admin", may be processed in any of the provider's regions, with names replaced before anything is sent. That description never promised that the brief would stay in Australia. And because any sheet with health or baby content stays in Australia, the brief does not widen what "Global, records stay here" means to include health records. So we do not ask any group to consent again, and neither the consent's wording nor its version changes. We will say plainly, in the privacy policy and on the app's AI transparency page, that the daily brief is among the organising uses a Global level sends abroad.

Baby lines keep both switches they have today: the group's choice for that baby (recorded under the baby_summary_to_model purpose) and the baby being on the reader's own Home. They are shown as a counted line composed on the phone, and this feature sends them nowhere.

A member's own plan is shown on their own phone as their own line; this feature does not send it to our servers. Today's brief does, for the reader's own copy; that stops for app versions carrying this change (§12 covers older versions).

What members are told (planned copy, to be tested for what it must not say):

Shortened on 10 October 2026, with every fact kept. The daily-brief setting shows that the brief is written twice a day from the group's shared records and that turning it off means you neither see nor cause one (shown); the group's weekly limit and the part added on your own phone are one tap away under it (one tap). The prompt on Home shows who writes the brief, from what, with Google's model and where Google may process it, what your answer does and does not decide, and how to turn it off (shown); the three-day retention, the line about your own plan being written on the phone, and the annual re-ask are one tap away above both answers (one tap). The consent's wording version moved to 2.1 because the layout of its words changed, not what they say, so a 2.0 yes still counts and nobody is asked again. On the AI transparency page the daily-brief section opens under its heading, below a summary that is always shown and says the brief goes to Google's AI. We accept the shorter screens under our principle of being useful first, with informed opt-in: the line that decides the choice is always in view and the rest is on the same screen.

We make no zero-data-retention claim for the provider and no end-to-end encryption claim for the edition.

Children. Child accounts are not offered the brief and cannot cause or read an edition (§7, §11), so no guardian consent is sought for a child to use it.

A setting changed during generation — the level, the time zone, the member leaving — discards the result. It cannot undo a request already sent to the provider.

9. Risks and mitigations

Risk Who is harmed Planned mitigation Structural or conventional? Residual
A member's private plan, a baby line or another member-specific record ends up in the paragraph every eligible member reads the member; a child The sheet is built on the server from shared records only, by a function with no input for a plan, an intention or a baby line; personal content is composed on the phone; the edition is readable only by eligible members Structural as to who reads the edition (the read rule); conventional, test-pinned as to what the sheet builder accepts What the requesting member can see does not by itself prove every eligible member can; the sheet reads only group-shared records for that reason
A global pass receives more than the group chose the group; a child The level read fresh before each pass and before publishing; health-and-baby sheets wholly to Sydney; placeholders in every global request Conventional, test-pinned (the routing and name-replacement checks) A word list and a roster match miss context (§12)
Recall resurfaces something sensitive — a child's past appointment a child; a member A closed list of four kinds, only for items on the sheet, 90 days, no counts, no person; health content routes to Sydney Conventional, test-pinned A recalled appointment can still surprise the reader
The paragraph confidently says something wrong or out of date the reader Citations for every sentence, our validator, an editor, hiding on the phone, the "Since this brief" line, repairs Conventional (the validator is code and is to be mutation-tested) Citations cannot prove meaning, and nothing can see a change the group never recorded
Completion or attendance becomes a scoreboard, or the brief a record of who uses the app members No per-person counts, no read records, no claimant or writing time on the edition, nothing ordered by engagement; group spend shown by week without who or when Structural as to the absent claimant and time columns and the unreadable money tables; conventional, test-pinned as to the prose An edition's existence tells the group that someone opened the app
One member's use spends another member's AI allowance, or the brief starves the assistant members A separate group ledger in the database; no personal allowance charged; not the assistant's budget Structural as to the ledger and its limit; conventional, test-pinned that the brief's code calls no personal meter The platform ceilings are shared by every surface
Brief text survives a narrowing, a deletion or a late writer the group; a child Deletion in the same transaction as the changes in §6; the fence and the re-checks at publishing; sweeps; the phone's copy held in memory Structural (triggers, the fence, sweeps) Offline phones; the provider's own handling; a hidden sentence is not erasure
A child reads or causes an edition a child; the adults Refused by our server before anything is read; refused again by begin; the read rule excludes child accounts Structural (the read rule and the database function) —
Spend runs past the limit — concurrent devices, retries, timeouts, repairs, an unpriced model the group; us A reservation inside a per-group lock before every attempt; two attempts and A$0.025 per edition; unknown outcomes held; unknown prices refused; missing usage fails the edition; the overrun switch Structural (the limit is checked in the database) A provider charging beyond the reservation (§12)
A compromised assistant server writes or spends the group The write function opens only for a Google-signed identity token for our server's own account, works out the requester itself, and offers three operations; our server holds no database key Structural as to the signature and the database functions' own checks; conventional, test-pinned as to the function's verification code Bounded as in §3: spending up to each group's limit, and publishing shaped text for a group whose member's session it holds
A departed or erased member's name stays in a brief the former member Names stored as ids and turned back into names from the current roster; a sentence naming someone who has left is hidden; editions swept within about three days Structural as to the sweep and the cascades; conventional as to hiding An erased member's id can sit in an edition, naming nobody, for up to about three days
Today's brief cache lets a member read a brief written from somebody else's plan the member The cache's read rule narrowed to the member it was written for, and expired rows swept Structural once released Not accepted — a defect, fixed by this change (§12.1)

10. Structural versus conventional

Structural, once built:

Conventional, each to be pinned by a test before release:

Conventional, not pinned: whether a paragraph's prose is fair and right beyond what the word lists catch. People reading it judge that, and so will the planned comparison of one pass against two.

11. Best interests of the child

12. Residual risk we accept, and one defect being fixed

12.1 Found: today's brief cache is readable by the whole group — fixed by this change

Today each member's brief is cached in a row that every active member of the group can read, child accounts included, through the database interface the app uses. Since the brief began including the reader's own private plan, another member could read a sentence written from somebody else's plan. This was found while writing the earlier draft of this assessment, and we checked it again against our database changes on 29 September 2026: it is still open. This change fixes it — the cache becomes readable only by the member it was written for — and sweeps expired rows. We treat it as a defect, not an accepted risk; until the fix is released, this paragraph is the record that the exposure exists. The same correction is made in the intentions assessment, whose statement that the brief "does not create a new disclosure path" was not true of reading.

12.2 What we accept

12.3 Not yet verified

These can only be checked once the build is deployed, and the first release is checked by hand on one Australia group and one Global test group: the identity token our cloud host issues to our server; the write function's check of Google's signature in its own runtime; the model honouring the thinking setting and the output limit in billing; token counting for the global model; and how long the write function takes to start.

12.4 What this assessment does not settle

The brief chooses which of the group's own records to mention by fixed rules about deadlines, timing and preparation, and the same paragraph is shown to every eligible member; the personal line filters by the reader's own assignments and plan. We do not argue from this that the service has no recommender feature. The self-assessment §15 already treats that condition as met for the proposed Home this brief belongs to, and its descriptions of the brief (one sentence, with suggestion chips) are out of date and will be revised when that section is next re-run. We did not re-read the primary sources for this document.

13. Review triggers

Re-read this assessment before any of:

The two triggers in the register's introduction (the Code's registration, and sign-up opening) apply as always.

14. Checklist against exposure draft s 38(2)

s 38(2) Requires Answered in
(a) the nature, scope, context, flow and purposes of the handling of children's personal information §§1–7
(b) why the collection of children's personal information is strictly necessary §2 — per item, and what is deliberately not collected
(c) how the collection is done by lawful and fair means §8
(d) whether the handling is consistent with the best interests of the child §11
(e) how the entity complies with this Code and the Act §§8, 10
(f) the risk of harm to, and potential impact on, children §§9, 11, 12

s 38(3): this assessment was written, and accepted, before the feature is built. s 39: listed on the published register.

15. Sources

Primary: Children's Online Privacy Code, exposure draft, ss 10, 13, 14, 38 and 39 (kept with the register's primary sources); not independently re-read for this document. Online Safety (Age-Restricted Social Media Platforms) Rules 2025, s 4A — relied on through the under-16 self-assessment §15, which read it on 29 September 2026; not re-read for this document.

Sibling assessments: cloud inference; privacy levels §3A; a personal Home, tool shortcuts, setup and assistant widgets; first uses; intentions; the baby tracker; child accounts; forwarded mail (the shared daily-brief surface slice).

The design this assesses: docs/home_brief_editions_plan.md (revision 2, 29 September 2026), which replaces revision 1 of 27 September 2026.

In repo, as they stand on 29 September 2026:

Built in this change, so the next revision against the code can find them: supabase/migrations/20260929022123_home_brief_editions.sql, supabase/migrations/20260929022126_insight_cache_owner_select.sql; supabase/functions/brief-ledger/; agent-server/src/brief/; lib/homeBriefFacts.ts, lib/homeBriefEdition.ts, lib/homeBriefDisplay.ts, lib/homeBriefLive.ts, hooks/useHomeBrief.ts, components/Home/HomeBriefCard.tsx, components/Home/HomeActionChip.tsx, lib/briefSpend.ts, components/Home/BriefSpendSummary.tsx; __tests__/brief_ledger.test.ts, __tests__/brief_editions_rls.test.ts, __tests__/dashboard_insights_rls.test.ts; agent-server/checks/brief.check.ts, agent-server/checks/briefFacts.check.ts.