← All privacy impact assessments
Self-assessment: is GroupApp an age-restricted social media platform?
Status: Current — assesses the app as it ships on 2026-09-08, before child accounts exist Written: 2026-09-07 · Revised: 2026-09-08 (WS21 — the features step) Issues: #330 (parked legal brief), #221 (this register), #282 §4, #282 WS21
What changed on 2026-09-08, and why the position moved. The 2026-09-07 draft found that GroupApp had a feedback feature (§5.3) and therefore satisfied the Rules' additional condition, which left the whole assessment resting on limb
63C(1)(a)(i)— a purpose argument eSafety's guidance tells an unsure service to presume against. §12 recorded that as an accepted risk, on the reasoning that read receipts were "a considered privacy design and deleting them to improve a technical argument would be optimising for the wrong thing".The owner reversed that trade on 2026-09-08 and removed the three feedback features instead: chat read receipts, photo-like attribution and the like action, and emoji reactions on messages. The reasoning is not that the old design was bad — it was not — but that the app was spending its entire legal position on an argument about purpose, which is unwinnable without usage evidence, in order to keep three small surfaces. Removing them settles the question one step earlier, at the features step, where the answer is a fact about the code rather than an argument about what the app is for.
The result is that §5 now fails for every limb of Rules s 4A, so
63C(1)(a)(iv)is not satisfied and the purpose question in §3 is never reached. §3 is retained in full anyway: it is still the honest state of that argument, it is what the app falls back on if any reading of §5 is wrong, and the §7A stocktake is retained as evidence for it. Nothing here is legal advice. This is the app's own reasoning, written down so a lawyer can review a draft rather than compose one, and so that the argument can be re-run when a feature changes.
0. Why this document exists, and what it is not
The under-16 minimum age has been in force since 10 December 2025. If GroupApp is an age-restricted social media platform, s 63D of the Online Safety Act 2021 requires its provider to take reasonable steps to prevent age-restricted users having accounts — civil penalty 30,000 penalty units — and there is no parental-consent exception anywhere in Part 4A. That is the fact that shapes everything downstream: the child-account design in #282 §4 is only lawful if the service sits outside the definition. A guardian being present does not buy an exemption, and — per eSafety's guidance, §1.3 — a restricted experience for under-16s carries no weight in the purpose test either. What the guardian design buys is harm reduction under the privacy Code. The ban question is decided on how the service is used by everyone.
This assessment is written now, before any under-16 holds an account, because the answer decides whether that feature may be built at all.
A correction to the posture document, up front. docs/privacy_posture.md §4.3 says a
service is age-restricted "only if all four limbs hold: significant purpose is social
interaction; users interact; users post; and a recommender or 'logged-in feature' — endless
feeds, displayed like counts, disappearing content." That was taken from a summary, and the
privacy-programme spec flagged it for re-checking against the primary text. Re-checked here,
the framing is roughly right in outcome and wrong in two ways that matter:
- The fourth item is not a fourth limb of the Act. It is
63C(1)(a)(iv)— "such other conditions (if any) as are set out in the legislative rules" — and the Rules fill it in. There are also two routes into the definition the summary omits (63C(1)(b), a service the Minister specifies) and two routes out (63C(6)). - The Rules define a "feedback feature" far more broadly than "displayed like counts".
On the statutory wording, GroupApp has feedback features today and dropping the numeric
like tally did not clear this condition. Section 5 below sets out why. That is the single
most consequential finding in this document, and it means the defence rests on
63C(1)(a)(i)— purpose — much more heavily than the posture doc implies.
1. The test, from the primary sources
1.1 Section 63C, Online Safety Act 2021
Inserted by the Online Safety Amendment (Social Media Minimum Age) Act 2024 (No. 127, 2024), Schedule 1 item 7. Verified against the authorised version registered 12 December 2024 on the Federal Register of Legislation. Quoted in full because the whole assessment turns on its wording:
63C Age-restricted social media platform
(1) For the purposes of this Act, age-restricted social media platform means:
(a) an electronic service that satisfies the following conditions:
(i) the sole purpose, or a significant purpose, of the service is to enable online social interaction between 2 or more end-users; (ii) the service allows end-users to link to, or interact with, some or all of the other end-users; (iii) the service allows end-users to post material on the service; (iv) such other conditions (if any) as are set out in the legislative rules; or(b) an electronic service specified in the legislative rules;
but does not include a service mentioned in subsection (6).
Note 1: Online social interaction does not include (for example) online business interaction.
(2) For the purposes of subparagraph (1)(a)(i), online social interaction includes online interaction that enables end-users to share material for social purposes.
Note: Social purposes does not include (for example) business purposes.
(3) In determining whether the condition set out in subparagraph (1)(a)(i) is satisfied, disregard any of the following purposes: (a) the provision of advertising material on the service; (b) the generation of revenue from the provision of advertising material on the service.
…
(6) An electronic service is not an age-restricted social media platform if: (a) none of the material on the service is accessible to, or delivered to, one or more end-users in Australia; or (b) the service is specified in the legislative rules.
Section 63D: "A provider of an age-restricted social media platform must take reasonable steps to prevent age-restricted users having accounts with the age-restricted social media platform. Civil penalty: 30,000 penalty units."
1.2 The Rules
Online Safety (Age-Restricted Social Media Platforms) Rules 2025 (F2025L00889), made
29 July 2025. Section 4A sets the 63C(1)(a)(iv) condition; section 5 sets the 63C(6)(b)
exclusions. Section 4A, verified against the Register:
4A Additional condition a service must satisfy to be an age-restricted social media platform
(1) For the purposes of paragraph 63C(1)(a)(iv) of the Act, it is a condition that the service has either or both of: (a) a recommender feature; (b) a logged-in feature.
(2) A service has a recommender feature if the service can: (a) select material by reference to any information that the service has associated with an end-user's account; and (b) display that material to the end-user while the end-user is using the service.
(3) A service has a logged-in feature if the service: (a) has one or more of the following features: (i) an endless-feed feature; (ii) a feedback feature; or (iii) a time-limited feature; and (b) does not enable an end-user to access, or be exposed to, at least one such feature unless the end-user is using the service with an account.
(4) A service has an endless-feed feature if the service can display material to an end-user: (a) in a feed of material that has no end-point; or (b) in a feed of material that has an end-point, but to which additional material is added: (i) when that end-point is reached; (ii) at time intervals; or (iii) in response to the end-user's input.
(5) A service has a feedback feature if the service can display information to an end-user about: (a) the extent to which other end-users have viewed or otherwise engaged with material posted by the end-user, or (b) notifications opted into by other users.
(6) A service has a time-limited feature if the service enables viewing of material only within a limited period after it has been posted.
Section 5 excludes services whose sole or primary purpose is: (a) communication by messaging, email, voice calling or video calling; (b) playing online games with other end-users; (c) sharing information about products or services, such as reviews, technical support or advice; (d) professional networking or professional development; (e) supporting the education of end-users; (f) supporting the health of end-users; and two further classes covering institution-to-student and healthcare-provider-to-patient communication.
1.3 What could not be verified at first, and what the source said when it arrived
eSafety's assessment guidance timed out on every automated fetch between 2026-09-02 and
2026-09-07. The owner retrieved it on 2026-09-08 (page last updated 30/03/2026) and it is
saved verbatim at
docs/sources/esafety-age-restricted-platform-assessment-2026-03-30.md.
Read against it, this document was right about the statutory test and wrong about two things,
both corrected in place on 2026-09-08:
Age-restricted features carry no weight in the purpose test. Step 7 of the guidance: "If a service restricts access to certain features which enable online social interaction based on age, this is not to be given any meaningful weight, as the service must consider its purpose(s) holistically." The first draft of §8 said the child-safe variant was "directly relevant evidence" under
63C(1)(a)(i). It is not. The variant is a privacy-Code measure and a harm-reduction measure; it is not part of the ban argument at all. §8 now says so.When unsure, presume significant. Step 7: "If end-users do appear to engage or be enabled to engage in online social interaction but the service is unsure whether it is a significant purpose, the service should presume it is significant." The first draft's §7 stated a position ("not an age-restricted platform") as though the purpose argument were settled. It was not, and the guidance names the evidence that would settle it — a documented stocktake of every social feature, with usage figures, and user surveys — none of which existed. §7 was rewritten the same day to presume against the app on that limb.
This is the correction that produced WS21, and its consequence is worth following. A service told to presume against itself on the only limb it is relying on has, in effect, no position. Rather than spend months assembling usage evidence to discharge a presumption — with child accounts blocked meanwhile, and the answer decided by how ten people happened to use the app — the owner removed the features that made limb
(a)(iv)true (§5.3). The purpose test is then never reached, and this correction's force is preserved rather than argued around: §3 and §7A still state the purpose argument honestly and still presume nothing in the app's favour. They are simply no longer what the position rests on.
The guidance also confirmed, in the regulator's words, what §4 and §5 concluded from the Rules' text: messaging in a closed group, inviting someone to join a group, and reacting with a like or an emoji are all "interaction" (Step 4); and a feedback feature is any display of "how many end-users have viewed or engaged with … material posted to their account" (Step 5(b)). Both readings are the ones §5.3 acted on — the regulator naming likes and emoji reactions as interaction, and defining a feedback feature broadly enough to catch attribution as well as counting, is why all three surfaces went rather than only the numeric tally. It broadened one thing this document had treated as obviously absent — the recommender definition (Step 5(a)) reaches any selection of material "based on any information associated with their account", explicit as well as inferred — see §5.1.
The guidance does not publish a list of specific in-scope or out-of-scope services (that is a
separate page, "Which platforms are age-restricted?", not retrieved); the earlier note that such
a list was unverified is withdrawn as moot. The Children's Online Privacy Code exposure draft was
also retrieved by the owner on 2026-09-08 and is at
docs/sources/oaic-childrens-online-privacy-code-exposure-draft.pdf;
its section numbers as cited across this register were verified against it — see
docs/sources/README.md.
2. The service being assessed
GroupApp as it ships on 2026-09-08: an invite-only iOS and Android app for a group — a family, a couple, a share house, a carer team — to run its shared life. Tasks and chores, a shared calendar, meal plans and shopping, a group chat, a photo wall, a baby tracker, a games hub, and an AI assistant that acts on the group's own tasks and calendar.
Facts that bear on the assessment:
- Every account is created by an existing member.
enforce_email_allowlist_on_signup(20260808150000) is aBEFORE INSERTtrigger onauth.usersthat rejects any address not inpublic.allowed_emails. It does not exempt the service role. There is no open sign-up today; opening it is #282 §2 and is growth-triggered, not built. - There are no profiles, no user search, no friend requests and no discovery. A member can reach exactly the people in the groups they are a member of. There is no RPC that answers "is this email on the app".
- Every content surface is scoped to one group by RLS. Chat, photos, tasks, calendar, baby
logs — all gated on
is_active_group_member(group_id). - There is exactly one cross-group surface: public meal-plan reviews and their dish photos.
A review is attributed to a household name frozen onto the row at write time, never to a
user, and is written only by the
submit-reviewedge function after LLM moderation (20260815234009). The client cannot write the table. - No advertising, no data sale, no tracking SDKs. (Under
63C(3)advertising purposes are disregarded for limb (a)(i) anyway, so this helps the app's posture generally and not this test.) - No under-16 holds an account. The privacy policy says so in terms:
constants/legalTexts.tsline 92 — "CHILDREN DO NOT HOLD ACCOUNTS. The app is for adults running a household; a child is a subject of a record, never a user of the service." #282 §4 makes that sentence false, which is why it is scheduled to change in the same release as the mechanism.
3. Limb (a)(i) — sole or significant purpose
the sole purpose, or a significant purpose, of the service is to enable online social interaction between 2 or more end-users
This is the whole defence, and it should be argued as such rather than hidden behind three weaker points.
The app's purpose is organising: who is cooking, who is collecting, what is in the fridge, when the appointment is, what the baby did today. Chat and photos exist because a family that is coordinating also talks, and because the coordination is unusable if you have to leave the app to say "running late". The store listing, the onboarding and every screen say organiser.
Arguments for the app:
- The organising surfaces are the app, by volume and by construction. Tasks, the calendar, meal plans, the shopping list, the pantry, the baby tracker, the games hub and the assistant have no social-interaction character at all. Chat and the photo wall are two surfaces among many, and both are group-scoped.
- Interaction is bounded by membership someone had to grant. There is no way to acquire a new interlocutor inside the app: no search, no suggestions, no public space. Whoever you can talk to, a member deliberately let in. A service on which you cannot meet anybody is a poor vehicle for "online social interaction" as a significant purpose.
- The assistant, the allocator and the tracker are the features that get built. The development history is a reasonable proxy for purpose, and it is almost entirely organisational.
Arguments against, stated because a self-assessment that only lists its own good points is worthless:
63C(2)is broad: "online social interaction includes online interaction that enables end-users to share material for social purposes." A photo wall exists to share photographs for social purposes. That is not a business purpose and the Note's carve-out does not reach it.- "Significant" is a low bar. It is contrasted with merely incidental or subsidiary, not with "primary". A chat and a photo wall are not incidental to this app; they are two of its named features, on the tab bar, and the photo wall was built deliberately.
- How the service is actually used is evidence of purpose, and today there is almost none of it: two live users at the time of writing, roughly ten by early September. The app cannot point at usage data showing organisation dominating, because there is barely any usage data. §7 sets out the metric that would begin to answer this.
Conclusion on limb (a)(i): genuinely arguable, and the app's best point — but not a safe harbour, and it should never be described as one. The honest sentence is that a significant purpose of GroupApp is enabling a group to run its shared life, and the sharing that happens inside it is in service of that; whether a regulator agrees is not something this document can settle.
AND THIS LIMB IS NOT REACHED, WHICH IS WHY THE SECTION READS THE WAY IT DOES. Since
2026-09-08 the app fails the cumulative condition at limb (a)(iv) (§5.5), so the definition
fails before the purpose question arises. This section is deliberately left as it was — argued
both ways, conceding that "significant" is a low bar and that the app has no usage evidence —
because a fallback that had been quietly improved once it stopped being load-bearing would be
worth nothing on the day it is needed. If §5.1's recommender reading is ever rejected, this is
what remains, exactly as honest as it was when it was the whole defence.
4. Limbs (a)(ii) and (a)(iii) — interaction and posting
(ii) the service allows end-users to link to, or interact with, some or all of the other end-users; (iii) the service allows end-users to post material on the service
Both are satisfied. Neither is contested, and the design should not pretend otherwise.
Limb (ii) says "some or all of the other end-users". A member interacting with the four other people in their group is interacting with some of the service's end-users. The absence of discovery makes the set small and non-expandable; it does not make the limb false.
This matters because the privacy-programme spec claimed that removing every cross-group surface from a child account "makes limb (b) false for every under-16 by construction". On the statutory wording that claim is too strong and should not be repeated: a child in a family group can chat with their parents and siblings, which is interaction with some other end-users. What the child-safe variant actually achieves is set out in §6 — it is real, and it is not this.
Limb (iii) is satisfied by any post to chat or the photo wall. The Rules' exclusion for messaging services shows that posting inside a closed conversation is not itself the mischief.
An RSVP is a coordination fact, and it is recorded rather than removed. Raised here because
after the 2026-09-08 removals (§5.3) it is the most feedback-shaped thing left in the app: a
member who creates a dinner event can see who has said yes and who has said no
(invited_user_ids / declined_user_ids on group_schedule_events), and that is unmistakably
information about how other members responded to something they created.
It is not a 4A(5)(a) feedback feature, for two reasons that should be read together rather than
either alone:
- An RSVP is not engagement with material; it is an answer to a question. The statute's phrase is "viewed or otherwise engaged with material posted by the end-user". An event is not material somebody consumes — it is a proposal to be somewhere at a time, and the whole content of the reply is the piece of information the household needs in order to act: how many for dinner, whether the lift is needed. A read receipt tells you nothing you can act on; an RSVP tells you how much rice to cook.
- It is the ordinary meaning of a calendar, and the app is a calendar. Every shared-calendar and invitation product works this way, and a version that hid the answers would not be a safer organiser — it would be a broken one.
What keeps this true, and what would break it. Today the display is the answer itself, for one event, to the people in that household. It would become something else if the app aggregated across events into a picture of a person's responsiveness — "Sam accepts 40% of invitations", a reliability score, a streak, a leaderboard of who turns up. That is a characterisation of a member built from their engagement, and it is exactly the shape this app has refused elsewhere (AGENTS.md → The Deal Counts. It Does Not Characterise, And It Never Ranks). §10 carries it as a review trigger.
5. Limb (a)(iv) — the Rules' additional condition
it is a condition that the service has either or both of: (a) a recommender feature; (b) a logged-in feature
5.1 Recommender feature — not present
Nothing in the app selects material by reference to information associated with an account and
displays it. Chat is chronological. The photo wall is chronological, grouped by album or by the
month the photo was taken in (derived on the client, in the group's timezone —
lib/photoAlbums.ts). Tasks and the calendar are ordered by date. There is no ranking, no
"for you", no suggested content.
The two model-driven surfaces are worth naming so the absence is not mistaken for an oversight: the dashboard brief writes one sentence about a list the server already assembled and selects nothing the user could not see; the task allocator chooses who from a client-computed list and may not add, drop, retime or rename an item (AGENTS.md → A Model May Choose WHO. It May Not Choose WHAT.). Neither displays selected material.
Read against eSafety's guidance (2026-09-08). The regulator's gloss on Rules 4A(3) is
broader than the plain reading above: a recommender feature is present if the service "can
select and display material to end-users based on any information associated with their
account", and that information "includes information the end-user has explicitly provided …
such as their age, contact list or location" as well as inferred usage patterns. On that reading
a home screen that shows a member the tasks assigned to them selects material by reference to
account-associated information.
The position, stated fully now that it carries weight. Since 2026-09-08 this reading is no
longer academic: with no logged-in feature left (§§5.2–5.4), the recommender question is the only
route by which 63C(1)(a)(iv) could still be satisfied, so it is set out at length rather than
waved past.
A recommender feature under 4A(2) has two elements — selection of material by reference to
account-associated information, and display of the selected material. GroupApp's filtering
satisfies the second and, on the guidance's broad reading, the letter of the first. The argument
that it is nonetheless not a recommender feature has four parts:
- The filter is identical for every member, and it is the member's own data. A task assigned
to you appears on your list; the same rule runs for everyone, produces a different answer only
because the underlying facts differ, and is the ordinary meaning of "showing someone their own
records". On the broadest reading of the guidance, every database application with a
where user_id = meclause has a recommender feature — an email inbox, a banking app, a payroll portal. The mischief4Aaddresses, and the Explanatory Statement's framing, is content curation: an algorithm choosing which of many available items will hold attention. - Nothing is inferred, and nothing is ranked. There is no engagement signal anywhere in the app to infer from — no dwell time, no view counts, no click history, no preference model, and since 2026-09-08 no likes, reactions or read receipts either, which were the only engagement-shaped data the app ever held. Ordering is by date and by assignment, both facts somebody typed. No surface is ordered by predicted interest.
- There is no corpus to select from. A recommender picks items for you out of a pool you did not author. Every item on every GroupApp surface was created by a member of the reader's own group, and the reader can already see all of it — chat is chronological and complete, the photo wall shows every photo in the group, the task list has a "show everything" view. The filters narrow a set the member can always widen by hand; they never withhold and never promote.
- The one model-driven selection is bounded and traceable. The dashboard brief writes one
sentence about a list the server already assembled, and its optional quick-add chips must each
trace to an item already in the household's own data — a visitor arriving, an appointment, a
planned meal — with the prompt forbidding an invented need and forbidding any suggestion drawn
from the counted baby facts (
supabase/functions/generate-dashboard-insight/suggestions.ts,SUGGESTION_CONTENT_RULES). A chip proposes creating something; it does not select existing material to display, and it is not chosen by anything inferred about the reader. That traceability is a prompt rule, which is conventional rather than structural, so it is pinned by a test named for this reason (__tests__/suggestions.test.ts→ "forbids a suggestion that does not trace to an item already in the household data"). Loosening it is a change to this assessment, not a prompt tweak.
Recorded as arguable rather than settled, and it is now the assessment's main exposure. Before 2026-09-08 the outcome did not turn on it, because the feedback feature satisfied the condition anyway. It does turn on it now. §12 carries this as the accepted residual risk in place of the one it replaces, and §10 keeps "a recommender appears" as the first review trigger.
Structural? No — conventional, and pinned by the architecture rules in AGENTS.md plus the suggestion-chip test above. Adding a ranked feed is a normal-looking product decision that nothing in the database would refuse. §9 records this as the escalation to watch.
5.2 Endless-feed feature — not present
4A(4): a feed "that has no end-point", or one with an end-point "to which additional material
is added" when the end-point is reached, at intervals, or in response to input.
The argument is that GroupApp's two scrolling surfaces are lists with a visible end, not feeds — and since 2026-09-08 the chat says so on screen. The 2026-09-07 draft called this "marginal, not relied on"; it is relied on now, so it is argued properly and the one thing that made it uncomfortable has been fixed rather than explained away.
The group chat. Scrolling to the top loads the previous page of that group's own history.
That is a bounded set: it is every message the group has ever sent, it does not grow while you
read it, and it terminates. What made the wording uncomfortable was that the terminus was
invisible — a list that simply stops is indistinguishable, on screen, from one that has not
finished loading, and "it is finite, trust us" is not an argument a user can check. So the chat
now renders a "Start of conversation" marker at the head of the list once there is nothing
older to fetch (app/group-chat.tsx, pinned by
__tests__/app/group-chat-conversation-start.test.tsx). The distinction from 4A(4) is then a
fact the reader can see rather than a claim in a document: the feed the Rules describe is one
where reaching the end produces more, and this one produces a full stop.
The honest residual: paging is triggered by scroll position rather than by a tap, so material is
added "in response to the end-user's input" in a literal sense. Two things answer it. The set is
closed and exhausts — 4A(4)(b) describes a feed to which material is added, and walking
backwards through history that already exists is retrieval of the reader's own archive, not
addition. And 4A(4)(a)'s "no end-point" is the paradigm the sub-paragraphs elaborate; a feed
that visibly ends is not that paradigm. Recorded as the second-weakest point in §5 after the
recommender question, and carried in §12.
The photo wall. Not paginated at all: the group's photos load as a whole and are grouped into
albums, or into the month they were taken in, derived on the client in the group's timezone
(lib/photoAlbums.ts). There is no auto-load on scroll, and none was added — a bounded set
rendered in sections, which reaches its oldest month and stops. Checked as part of this
workstream on 2026-09-08 rather than assumed. Do not add infinite scroll here; §10 keeps it
as a review trigger, and if the wall ever needs paging for performance it should page on an
explicit control with the same visible terminus the chat now has.
5.3 Feedback feature — removed 2026-09-08
4A(5)(a): information displayed to an end-user "about the extent to which other end-users have
viewed or otherwise engaged with material posted by the end-user".
The 2026-09-07 draft found three of these and recommended keeping them. That finding was correct and the recommendation was reversed by the owner the next day. All three are gone, for every member — not for children, because eSafety's Step 7 gives an age-restricted experience no weight (§1.3), so a child-only version would have bought nothing at all.
| Surface | What it displayed | Removed |
|---|---|---|
| Chat read receipts | The Sent/Read tick on a sent bubble, and Read by 2 of 3 under the newest one. |
MessageMeta's tick and ReceiptCaption deleted; lib/chatReceipts.ts deleted; the cursor poll, the broadcast subscription and the store's groupChatReadCursors deleted; the settings switch removed. |
| Photo likes | A heart on the grid tile when a photo had any like, and Liked by You and Sam in the viewer naming every liker. |
The heart action, the badge, the names and togglePhotoLike deleted. The Home rail's like-ranked band went with them (§5.1, point 2). |
| Message reactions | An emoji chip row under a bubble, counted per reaction, and a picker in the long-press sheet. | The picker, the chip row, toggleGroupMessageReaction, the loaders and the realtime subscription deleted. |
THE REMOVAL IS ALSO AT THE SERVER, AND THAT IS THE PART THAT MAKES IT A PROPERTY OF THE SERVICE
RATHER THAN OF THIS BUILD. 4A(5) asks what the service can display, and the anon key ships
inside the app bundle — so with the grant in place, a client could still have asked
my_group_chat_read_cursors who had read its messages and drawn the answer itself. Migration
20260908010039 revokes EXECUTE on that SECURITY DEFINER RPC from every role, drops the trigger
that broadcast a poke on every cursor advance, and drops the realtime.messages policy that
authorised listening for it. On this register's own structural vs conventional test, the read
receipt is now structural: a missing grant survives a refactor, a deleted component does not.
The likes and reactions removals are conventional — their tables are dormant but still
writable by an active member through PostgREST — and the honest note is in §12.
What was kept, and why each is not a feedback feature:
group_chat_reads, the member's own read cursor. Still written on opening and leaving the chat, because it is what clears their unread badge. It records where this person has read up to, it is owner-private in the database, and no other member can see it. What was removed is the ability to read anybody else's.4A(5)(a)is about what the service tells you about others' engagement with your material; a person's own reading position is neither.- The in-flight clock on a sending message. It says this device has not heard back from the server yet. It is about the sender's own network, resolves in a second, and reports nothing about any reader.
- Typing indicators (
20260903153805). Considered, and kept. A typing mark is about a message that does not exist yet: it reports presence at the composer, says nothing about anything the reader has posted, and evaporates in seconds with no row behind it.4A(5)(a)reaches engagement with "material posted by the end-user", and there is no such material in question. Recorded here rather than left implicit, because it is the nearest neighbour to what was removed and the next reader will ask.4A(5)(b)— "notifications opted into by other users" — is not engaged either: nobody opts in to being told about a particular member or a particular thread. - Every table and column.
group_photo_likes,group_photos.like_countand its maintaining trigger,group_message_reactionsand its check constraint, andusers.read_receipts_enabledall remain. Migrations here are additive-only, and a bundle that predates the release is entitled to keep working through the OTA window. Nothing was destroyed; the client simply no longer reads or writes any of it.
Finding: the app has no feedback feature. Combined with §5.2 and §5.4, it has no logged-in
feature, and 4A(3) is not satisfied.
What holds this, since none of it is enforced by a CHECK. components/Chat/__tests__/noFeedbackFeatures.test.ts
is a source scan named for this reason — it looks for the identifiers a reinstated feature would
have to use, across the chat and photo directories and their store slices, and it is
mutation-tested (a reinstated heart fails it). Beside it sit behavioural assertions in the sheet,
the row, the tile and the viewer, and a db test asserting the RPC answers permission denied for function my_group_chat_read_cursors — the message, not the bare 42501, because
authenticated holds table grants underneath and a code-only assertion would pass with the grant
back in place.
What users lost, stated plainly rather than left for them to notice. A sender can no longer tell whether anyone has read a message. A photo cannot be acknowledged without typing something. A message cannot be answered with a single tap. These were small, well-liked features and two of them were carefully designed — the read receipt's unattributed return shape is one of the better privacy decisions in this codebase. They were removed because keeping them cost the app its whole position at Step 5 and left everything resting on a purpose argument that, on the regulator's own rule, is presumed against a service that cannot evidence it.
5.4 Time-limited feature — not present
4A(6): a service has one if it "enables viewing of material only within a limited period after
it has been posted."
Nothing in the app disappears. No stories, no view-once messages, no auto-expiring posts. A
message, a photo, a task and a baby log are all readable until somebody deletes them or the
account is erased. The retention sweeps that exist — assistant history at 30 days,
sweep-moderation-log, sweep_baby_history_deletions — are the opposite of a viewing window:
they are the app disposing of its own records, not a limit on how long a member may look at
something they were shown.
The one design that WOULD have engaged this, and how it was changed. Cross-group event groups
(#331) were specified with a lifecycle that deleted a temporary group, and its chat and photos,
some days after the event. That is 4A(6) almost verbatim — material viewable only for a limited
period after posting — and it would have put the app back inside the condition through a feature
nobody thought of as social at all.
Owner decision, 2026-09-08 (#331): an event group is ARCHIVED READ-ONLY after the event plus seven days, and is deleted only by an explicit admin action or by the ordinary erasure rules. Never by a timer. The nightly sweep archives and does not delete; the cap on active event groups per founding group is unchanged. Archived means the material stays readable to the people who were there — which is what makes it not a viewing window.
BUILT THAT WAY, 2026-09-08 (WS7, migration 20260908035756_ws7_event_groups). The decision is
now a property of the schema rather than a note in a plan, and three things are worth naming
because each is what a later change would have to undo:
- There is no
delete_aftercolumn for a sweep to read, andsweep_event_groupscontains nodeletestatement. It setsarchived_atand returns a count. - The archive is enforced on WRITES ONLY —
as restrictivepolicies refusing INSERT and UPDATE ongroup_messages,group_tasks,group_schedule_eventsandtask_completionswhen the group is archived. Reads are untouched, deliberately and in as many words: an archive nobody could read would be a deletion with extra steps. - No copy anywhere promises automatic deletion, and that is a test rather than a convention:
lib/__tests__/eventGroups.test.tsscans every string the feature can render — including the create screen's and the join screen's lifecycle notices, over a matrix of arguments — for "deleted after", "will be deleted", "expires", "disappears" and "temporarily". The obvious future edit is somebody putting a deletion date back on a screen because it reads as reassuring; that is the edit this scan exists to stop.
Two things follow for whoever builds it (WS6/WS7, assessed in
cross-group-events.md):
- A retention timer on member-posted content is now a change to this assessment, not a housekeeping decision. Anything that would make a photo or a message stop being viewable after a period needs this section re-run first.
- Archive is not a soft delete on a countdown. If "archived" ever comes to mean "removed after N days", the distinction this rests on has quietly gone.
5.5 Conclusion on limb (a)(iv)
Not satisfied.
| Rules s 4A feature | Present? |
|---|---|
Recommender (4A(2)) |
No — argued at length in §5.1, and recorded as arguable rather than settled |
Endless feed (4A(4)) |
No — a chat with a visible start, a wall in month sections (§5.2) |
Feedback (4A(5)) |
No — the three that existed were removed on 2026-09-08 (§5.3) |
Time-limited (4A(6)) |
No — nothing expires, and event groups archive rather than delete (§5.4) |
4A(1) requires either a recommender feature or a logged-in feature. A logged-in feature is one
of the last three (4A(3)), and the app has none of them, so the only live question is the
recommender one — which is why §5.1 is now the longest part of this document and why §12 carries
it as the principal residual risk rather than a footnote.
6. The exclusions in Rules s 5 — none is claimed
For completeness, and because claiming one wrongly would be worse than claiming none:
| Exclusion (sole or primary purpose) | Why not claimed |
|---|---|
| (a) messaging, email, voice or video calling | GroupApp is not primarily a messaging service. Chat is one surface among many, and the app's own architecture rules treat it as subsidiary to organising. Claiming this would be wrong on the facts and would sit oddly beside a store listing that says organiser. |
| (b) playing online games | The games hub is a chores-and-points layer over the task system, not the purpose of the app. |
| (c) sharing information about products or services (reviews, technical support, advice) | Public meal-plan reviews genuinely are this, and they are the app's only cross-group surface — but they are a small part of one module, not the primary purpose. Noted because it is the exclusion nobody thought to check; it does not apply. |
| (d) professional networking or development | Not applicable. |
| (e) supporting education | Not applicable. |
| (f) supporting health | Deliberately not claimed, and this is a decision rather than an oversight. The baby tracker records infant feeds, sleeps, nappies, medicine doses, temperatures and growth. Arguing that GroupApp's primary purpose is supporting health would contradict the owner's explicit and repeatedly enforced position that this is an organisational tool and not a health device (AGENTS.md → Health Content — Baby Tracker; #218/#330), a position the code has been deleted three times over to make true. It would also cut directly against the argument the app wants available under the Privacy Act's health-service question, where the case is that the tracker records rather than manages health. Two inconsistent stories in two forums is worse than one imperfect one in both. |
63C(6)(a) (no material accessible in Australia) plainly does not apply. No service has been
specified under 63C(1)(b) or 63C(6)(b) that reaches this app.
7. Overall position on the app as it ships today
| Element | Satisfied? |
|---|---|
63C(1)(a)(i) sole or significant purpose is online social interaction |
Not reached — see below |
63C(1)(a)(ii) end-users can link to or interact with some or all others |
Yes |
63C(1)(a)(iii) end-users can post material |
Yes |
63C(1)(a)(iv) Rules s 4A condition (recommender or logged-in feature) |
No — §5.5 |
| Rules s 5 exclusion | None available or claimed |
Position (2026-09-08): GroupApp is not an age-restricted social media platform, because it has
neither a recommender feature nor a logged-in feature. The condition in 63C(1)(a)(iv) fails, so
the definition fails, and the purpose question in 63C(1)(a)(i) is never reached.
The four limbs of 63C(1)(a) are cumulative. Limbs (ii) and (iii) are conceded — members interact
and members post, and this document has never pretended otherwise. Limb (iv) is where the app now
sits outside the definition: after 2026-09-08 there is no endless feed, no feedback feature and no
time-limited feature, so there is no "logged-in feature"; and the recommender question is argued
in §5.1 and answered no.
Why the app was taken out here rather than at limb (i), which is the whole point of this revision. The purpose argument in §3 is good and it is honest, and it is also a losing position to rely on. eSafety's Step 7 says a significant purpose is decided by how all end-users actually use the service, not by how it describes itself; that a restricted experience for children counts for nothing; and that "if the service is unsure whether it is a significant purpose, the service should presume it is significant." GroupApp has a group chat as a first-class tab, a photo wall, and roughly ten users' worth of evidence about any of it. Under the regulator's own rule the app was therefore obliged to presume against itself on the only limb it was relying on. Limb (iv) is not like that: it is a question about what the code does, answerable by reading the code, and re-checkable by anybody. Three small features were the price of moving the argument from one that has to be believed to one that can be verified, and the owner paid it.
§3 is retained in full and is not now surplus. It is the fallback if any reading in §5 is wrong — most plausibly the recommender reading (§5.1), which is recorded as arguable. A document that deleted its purpose argument the moment it stopped being load-bearing would have nothing to say on the day somebody disagrees with §5.1.
What follows from the position, stated so nobody softens it later:
- Child accounts (#282 §4) are no longer gated on the stocktake. The gate was §7A, and it
existed because the previous position presumed a significant purpose, under which s 63D would
have prohibited an under-16 account outright. That premise is gone. WS8 proceeds on its own
merits — the privacy-Code work in
child-accounts.md, which is a real gate and unaffected by any of this. - The absences in §5 are now the load-bearing thing about this app, and most of them are conventional. Nothing in the database prevents somebody adding a ranked feed, a heart, or a countdown to a shared album. What prevents it is this document, the AGENTS.md rule, and the source scan named after it. §12 says so as an accepted risk rather than leaving it to be discovered.
- The design posture does not relax because the argument got easier. No discovery, no feeds, no engagement mechanics, no cross-group social surface. Those were always the right design for a household organiser; they are now also the thing the legal position is made of.
7A. The social-interaction stocktake — retained as evidence, no longer a gate
eSafety recommends a documented stocktake of every feature that enables online social interaction, answering for each: how many and what share of members use it; what share of time on the service it carries; how integral and how prominent it is; and whether members would keep using the service without it. Plus the effort spent maintaining those features relative to the rest, the terms of use governing behaviour, and a survey of members on why they use the app.
A feature was added on 2026-09-08 and does not change the list. Event groups (#331, WS7) add a cross-group chat and bring list. They are social interaction and belong in the count below; they add no s 4A feature — no ranking (the group is reached from My Groups, never suggested), no endless feed (the same chat, with the same visible "Start of conversation" terminus), no feedback feature (the chat is the ordinary one, which has had none since 2026-09-08), and no time-limited content (§5.4). What they DO change is §3 and §9, which is why the count below gains a line.
Its status changed on 2026-09-08 and the change is worth being precise about. It was the gate on child accounts, because the position then rested entirely on limb (a)(i) and the stocktake was the only thing that could have discharged the presumption against it. The position no longer rests there (§7), so the stocktake gates nothing. It is retained for two reasons that are not ceremonial:
- It is the evidence for §3, and §3 is the fallback if §5.1's recommender reading is ever rejected. Discovering on that day that nobody had begun collecting it would be discovering it at the worst possible time.
- It is the instrument that would detect the drift in §9 — teen-only groups, the app being used as a social space rather than an organiser. That risk is unchanged by anything in this revision, because it was never about the definition.
Constraints on how the evidence is collected, so the stocktake does not itself become a privacy problem: counts, never profiles — per-surface event counts and session-share figures aggregated server-side with no per-person series retained (the ops report in #277 is the instrument); the survey is the tester group answering in their own words; and it is re-run on every trigger in §10. The features to count, from Steps 4 and 5: chat messages sent, photos posted and viewed, invites sent and redeemed, message pushes delivered, RSVPs answered — against tasks created and completed, events created, meal plans adopted, baby logs written, event groups created, joined and left to archive (WS7, added 2026-09-08). (Reactions, read receipts shown and likes were on this list until 2026-09-08; there is nothing left to count.)
8. The child-safe variant: harm reduction under the Code, not a ban argument
The child-account design (#282 §4; assessed in child-accounts.md, and
built — WS8, #354, 2026-09-08) does not create an exemption. Part 4A has no parental-consent carve-out, and if
the service were age-restricted, an under-16 account would be prohibited however carefully it
was configured.
Corrected 2026-09-08. The first draft said the variant made the app's position "checkable rather than rhetorical" and called it the verifiable half of the ban argument. eSafety's guidance (§1.3) says the opposite in terms: age-based restriction of social features "is not to be given any meaningful weight" in the purpose test, and a service "may be an age-restricted social media platform even if it restricts some or all of these features and functions to end-users above or below a certain age." So the variant contributes nothing to whether GroupApp is age-restricted. What it does is reduce the harm to a child if the app is used by one, and satisfy the privacy Code's data-minimisation and best-interests duties for children who hold accounts. Every item below is planned, and is justified on those grounds alone:
- No cross-group surface at all. The one that exists — public reviews and dish photos — is
refused for a child account. A child's every interaction is inside a group an adult founded.
Under
63C(1)(a)(ii)this does not make the limb false (§4), and under(a)(i)it carries no weight (§1.3). Its justification is the Code: strictly-necessary-by-default collection (s 9) and best interests (ss 10–11). - No assistant, no dashboard insight, no allocation, no voice grants. Fails closed, re-checked server-side on every turn. This is a Code measure (exposure draft ss 26, 28) as much as a ban measure, and it removes the surface on which a model would ever compose prose to a child.
- No baby tracker. A sibling's health record is not a child's to browse.
- No likes, no reactions, no read receipts — and not as a child restriction. This bullet used
to end with an open question: whether a child account should lose attributed likes and read
receipts, which would have made the child experience free of any
4A(5)feature. The question is moot as of 2026-09-08 (§5.3): all three were removed for every member, so there is nothing here for a child-specific rule to switch off. That is the right shape as well as the simpler one — under Step 7 an age-gated version of a feature counts for nothing, so a child-only removal would have been effort spent on an argument that does not exist, while leaving the feature in front of everybody else. - No group founding, no invites, no member admin.
- The guardian invariant. A child account exists only in a group where one of their
guardians is active, enforced by a
group_memberstrigger — not by hidden tabs. Departures are the hard edge: a guardian leaving a group that would strand a child is refused, and guardian erasure checks for dependants.
Corrected again 2026-09-08. Nothing above changes — the variant is still a privacy-Code and
harm-reduction measure and still contributes nothing to the ban question. What changes is what it
is waiting on: §7A was the gate on this feature and is no longer (§7). WS8's gate is now
child-accounts.md alone, which is the gate it always should have had.
Every one of those is built as a database refusal proven with a child account in the same
group (__tests__/child_accounts_rls.test.ts, merged in #354 on 2026-09-08), which is the only
kind of proof that means anything here — a stranger is excluded by
is_active_group_member no matter what the policy says (AGENTS.md → Check RLS Is ENABLED
Before Writing Policies). Hidden tabs are not enforcement and were not accepted as such: the
Assistant tab is hidden for a child AND the server refuses the caller AND the policies refuse the
rows the screen would write.
9. The risk this ban creates for us specifically
The posture doc names it and it is worth restating because it is our own market thesis inverted: the ban creates a population of under-16s looking for a group chat with a photo wall and no restrictions. A teen-only "group" — six friends, one of them nominally an adult — would be exactly that, and a pattern of them would be direct evidence that a significant purpose of the service in practice is social interaction. The argument in §3 is the kind that erodes from use rather than from a code change.
Structural answers, all in #282 §4 and all planned:
- A child cannot found a group, cannot accept an invitation alone, and cannot invite anyone.
- A child account cannot exist in a group with no active guardian, by trigger.
- Founding is age-assured once, per group. Today that is manual allowlisting by the owner,
who knows the person; the planned self-serve version is a $0 Stripe SetupIntent plus a
birth-month declaration on the web, recorded on
groups.founder_assured_at/founder_assured_by. A card is possession, not age — some Australian banks issue debit cards from 14 — so this is reasonable steps, not proof, and the PIA says so. - Assurance is once per group; declaration is per child. The per-member age question that an earlier draft put at the join ceremony has been withdrawn. What remains is one checkbox by the adult creating the entry: "this person is under 16, I am their parent or guardian."
The metric that would show the pattern, and the only one worth collecting: per group, the
number of child accounts and the number of active guardians. A group with several child
accounts and one guardian who never posts is the shape to look at. It is a count, never a
profile; it is not per-member behavioural data, it is not shown to anyone outside the operator,
and it exists to answer one question. Collecting more than that in the name of enforcing the
ban would be the wrong trade and, if the app were age-restricted, 63F would require its
destruction after use in any case.
The escalation path, if teen-only groups appear as a real pattern: a stronger age-assurance method at founding. Never per-member age checks. One check per group founding, ever. The reasoning, which belongs on the record before the pressure arrives:
- Per-member checks would age-verify every member of every family to catch a rare misuse, which fails minimisation and is exactly what the Children's Code's s 8(5) posture lets a service skip by applying child-level protections to everyone instead.
- They would put an identity check between a parent and their family calendar.
- The failure mode being defended against is a group founded for the wrong purpose, so the group is the right place to check.
- A constraint that cuts the other way, and is worth understanding before reaching for
stronger assurance:
63DAand63DBprohibit a provider of an age-restricted platform from collecting government-issued identification material, or using an accredited Digital ID service, for the purpose of complying with s 63D — with an exception where the provider offers reasonable alternative means. Those provisions bind age-restricted platforms, so on this assessment they do not bind us; but they mean the strongest-looking assurance method is the one the legislature specifically declined to make compulsory, and reaching for it would be a poor fit with the direction of the law even where it is permitted. Any escalation should stay in the family of possession-and-declaration signals.
10. What would change this answer
Re-run this assessment when any of the following becomes true. Each is a change somebody would make in good faith, which is why the list is specific:
- ANY FEEDBACK FEATURE RETURNS. First on the list because it is now the whole position, and
because each candidate is a small, obviously-nice thing somebody would add in good faith: a
heart on a photo, an emoji tap on a message, a read tick, a view count on an album, "3 people
have seen this", a seen-by list on an event. The test is whether it displays to a member how
others responded to something they posted.
components/Chat/__tests__/noFeedbackFeatures.test.tsis what makes the reflex fail loudly, and re-granting EXECUTE onmy_group_chat_read_cursorswould be the same event by another route. - A recommender appears. Anything that selects what to show by reference to account- associated information — a "you might like" rail, a ranked chat summary, a photo memories surface, a suggested-task feed. Today's absence is conventional, not structural, and §5.1 is already the assessment's thinnest ice: an ordering by anything inferred, or a suggestion chip that stops tracing to the household's own items, would end the argument rather than weaken it.
- An endless feed appears. Auto-loading older content on scroll in a surface with no visible end, or removing the chat's "Start of conversation" marker, or paginating the photo wall.
- Disappearing content appears. Any view-once or auto-expiring post — including an event group whose archive becomes a deletion on a timer (§5.4). 3a. RSVPs become a characterisation. An acceptance rate, a reliability score, a streak, or any aggregate across events describing a member's responsiveness (§4).
- A cross-group surface for individuals appears. Cross-group RSVP invitations and event
groups (#331) are exactly this and are assessed separately in
cross-group-events.md, which re-runs this test. Any directory, discovery, people search, or child-to-child link across a group boundary is a line not to cross. - Sign-up opens (#282 §2). "Every member was vouched for by an existing member" is load- bearing in §3 and stops being true.
- Child accounts ship (#282 §4). The population being assessed changes.
- Marketing or the store listing changes register — anything that sells the app as a place to share, connect or keep in touch rather than to organise. Purpose is assessed on how a service presents itself as well as how it is built.
- The Games Hub gains a cross-group or ranked-across-groups surface. Its leaderboards are within-group and deterministic today, and The Deal deliberately refuses to rank members at all (AGENTS.md → The Deal Counts. It Does Not Characterise, And It Never Ranks). Keep it that way.
- The §7A stocktake produces a result, in either direction, or usage changes enough that a previous result no longer describes the service. It no longer gates anything, but a result that undermined §3 would matter on the day §5.1 is challenged.
- eSafety publishes new guidance or a decision about a comparable service (a family organiser, a group-chat-plus-photos app).
11. Store policies — a separate constraint, noted once
Neither Apple nor Google requires a minimum account age for a general-audience app, but both treat an app "directed to children" differently (Apple's Kids Category rules, Google Play's Families policy). GroupApp should remain a general-audience family app with a mixed-audience declaration, not a kids app: it is compatible with under-16 members, much cheaper, and matches what the app actually is. Unverified against the current text of either policy — this is a note to check before child accounts ship, not a conclusion.
12. Residual risk, accepted
The two risks this section carried on 2026-09-07 are gone, and it is worth saying what replaced them rather than quietly swapping the list. It used to record that the whole position rested on one limb which was presumed against us, and that the app had a feedback feature and would keep it. Both were true, and both were fixed by removing the features rather than by re-arguing them (§7). What is left:
- THE RECOMMENDER READING IS NOW THE PRINCIPAL EXPOSURE. §5.1. eSafety's gloss on
4A(2)reaches selection by "any information associated with" an account, explicitly including information the user provided rather than only what was inferred. A task list filtered to the member it is assigned to is, on the broadest possible reading, within those words. The app's answer is that4Ais aimed at content curation, that nothing here is inferred or ranked, that every item was authored by the reader's own group and is already fully visible to them, and that the one model-driven surface proposes only things traceable to the household's own data. That answer is good and it is not settled, and it no longer has a second limb standing behind it — before 2026-09-08 the outcome did not turn on it, and now it does. Accepted, with §5.1 written at length so a lawyer is arguing from a position rather than composing one, and with the suggestion-chip rule pinned by a test. - The chat pages on scroll rather than on a tap. §5.2.
4A(4)(b)(iii)catches a feed to which material is added "in response to the end-user's input", and scrolling to the top is input. The answer is that the set is closed, already exists, and visibly terminates in a marker. Accepted as the second-thinnest point in §5. If it ever needs strengthening the fix is cheap and known: make the older page load on an explicit control. - NEARLY EVERY ABSENCE IN §5 IS CONVENTIONAL, NOT STRUCTURAL. One is now structural — the read
cursors, by a revoked grant (§5.3) — and the rest are held by a source scan, a set of
behavioural tests, this document, and the AGENTS.md rule.
group_photo_likesandgroup_message_reactionsare dormant but still writable by an active member through PostgREST, so "the app has no reactions" is a statement about the client. Accepted deliberately: dropping the tables would be a destructive migration against the additive-only rule and would break any bundle still in the OTA window, for a property that a new UI could restore in an afternoon anyway. The mitigation is that the reflex fails a named test, not that it is impossible. - Three features were removed from live users with no way to opt back in. A sender cannot tell whether a message was read; a photo cannot be hearted; a message cannot be answered with one tap. Roughly ten people were using the app at the time. Accepted as the price of the position in §7, and recorded here rather than only in a commit message so that a future reader who wonders where the heart went finds the reason and not just its absence.
- There is almost no usage data, and §3 is still the fallback. The purpose argument cannot yet be supported by evidence of how the service is used, because it is barely used. That no longer matters for the current position, and it matters entirely if §5.1 is ever rejected. Accepted; §7A is retained as the instrument.
- This is the app's own reasoning, not advice. It has not been reviewed by a lawyer (#330), and eSafety has published no decision about a comparable service. Accepted; the register exists so that review starts from a draft.
13. Review trigger
Any item in §10 — and §10's item 0, any feedback feature returning, is now the one most likely to be tripped by a change nobody thought of as legal. Additionally: on registration of the Children's Online Privacy Code, and before this document is given to a lawyer under #330.
This assessment is a gate on nothing, and that is a change from the 2026-09-07 version. §7A
used to gate child accounts; it does not (§7). What replaces the gate is the review trigger and
the mechanical check named after it (components/Chat/__tests__/noFeedbackFeatures.test.ts) — a
PIA is a weaker guard than a CHECK constraint, which §12 says in those words, and the source scan
is the strongest guard available for a property that lives in the client.
14. Sources
Primary, verified 2026-09-07:
- Online Safety Amendment (Social Media Minimum Age) Act 2024 (No. 127, 2024) — authorised version registered 12 Dec 2024. Schedule 1 item 7 inserts Part 4A: ss 63A–63G. Sections 63C, 63D, 63DA, 63DB, 63E and 63F read in full.
- Online Safety (Age-Restricted Social Media Platforms) Rules 2025 (F2025L00889) — ss 4A and 5 read in full.
Primary, not reachable:
- eSafety, How to assess if a service is an age-restricted social media platform —
https://www.esafety.gov.au/about-us/industry-regulation/social-media-age-restrictions/assessment. Retrieved by the owner 2026-09-08; saved atdocs/sources/. Read in full; corrections in §1.3.
In repo, verified against the code:
constants/legalTexts.ts(the "children do not hold accounts" sentence, line 92)lib/photoAlbums.ts— chronological month grouping, andrankPhotosForHome(pinned, then newest first; nothing engagement-derived)supabase/functions/generate-dashboard-insight/suggestions.ts—SUGGESTION_CONTENT_RULES, the traceability rule §5.1 relies onapp/group-chat.tsx— the "Start of conversation" marker (§5.2)supabase/migrations/20260808150000(enforce_email_allowlist_on_signup)supabase/migrations/20260815234009(public reviews, household attribution)AGENTS.md— The App Shows Nobody How Others Engaged With What They Posted; A Model May Choose WHO. It May Not Choose WHAT.; Health Content — Baby Tracker; The Deal Counts. It Does Not Characterise, And It Never Ranksdocs/privacy_posture.md§4.3 and §5 — the framing this document corrects
What the 2026-09-07 draft cited, and where it went (2026-09-08, WS21). Kept because the removal is the substance of this revision and a reader checking the old citations should find out why they no longer resolve, rather than assuming the document rotted:
lib/chatReceipts.ts(Read by N of M) — deleted. Its RPC,my_group_chat_read_cursors(20260815173614), survives with EXECUTE revoked from every role by20260908010039.components/Chat/MessageRow.tsx— the tick andReceiptCaptiondeleted; the file remains.components/Social/PhotoTile.tsx,components/Social/PhotoViewer.tsx— the heart badge, the like action and theLiked by …names deleted; both files remain.supabase/migrations/20260816003714_group_photo_albums.sql(group_photo_likes,group_photos.like_count) and20260817230722(group_message_reactions) — unchanged and dormant. Migrations here are additive-only; nothing reads or writes them.components/Chat/__tests__/noFeedbackFeatures.test.ts— new, and the thing that keeps the above true.