ChatWell Gen-5 System atlas
P2

Projects

EXISTS, AND REACHES·a workspace's main project exists; a membership in it is separate
WHAT EXISTS IN EVERY WORKSPACE · provisioned with it, not granted to anyone
Workspace
automatic
Main projectPJ-MAIN-1XD-CONT-1
automatic
Every workspace has one main project, which cannot be archived on its own.PJ-MAIN-1
A new workspace does not start empty. A workspace someone creates begins with a main project and a chat for it, and its creator is in that project.WS-START-1
WHAT ACCEPTING A WORKSPACE INVITATION REACHES
The workspacemembershipWS-MEM-1PJ-ACC-4
Its main projectno membership comes with itPJ-ACC-4
That project's General Chatno access comes with itPJ-ACC-4
Any other project, and its tasksa person needs their own membership in that projectPJ-ACC-1
0project memberships held0project chats reached
VALID
A member with no projects at all is a correct state.
PJ-ACC-7T1-4
HOW A PROJECT MEMBERSHIP ARISES · the guide names these; it closes no list
Project admin, or the workspace ownerrelationadds a workspace member
project by project
PJ-ACC-3
Whoever creates a projectrelationbecomes an admin of it
PJ-CRE-1
Owning the workspacecausesevery active project
a standing membership with the admin role
PJ-ACC-6
Memberships made before this rulerelationare left alone
still real memberships, not taken away
PJ-ACC-8

Derived from the published System Guide. Every row cites the claim groups it renders, and every rule on it is quoted from one of them.

ShowFiltering hides nothing permanently; everything is present in the page.

You are in: Projects. This assumes only the core model (T1).

P2.1What a project isPermalink

PJ-WHAT-1A project belongs to exactly one workspace and is either active or archived.

Tasks live in projects. A project can be archived on its own; that leaves its workspace and the workspace's other projects unchanged.

Why is this true?
ClaimPJ-WHAT-1
CoversWhat a project is
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesWorkspace & project lifecycle modelAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§4 Project lifecycle; §4.2 independent project archival
lines 215-222, 238, 250-251
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
1of4 create table public.project
lines 594-596
PJ-MAIN-1Every workspace has one main project, which cannot be archived on its own.Partly defined

It is created together with the workspace. Partly defined.

Why is this true?
ClaimPJ-MAIN-1
CoversThe main project
StateWorks today
CoveragePartly defineda fact about the sources, not a reader label
SourcesMembership modelAccepted Gen-5 implementation
Exact identity
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 operation matrix — seeded default project
lines 188, 194
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 archive_project (WORKSPACE_MAIN_NOT_ARCHIVABLE); 2of4 create_workspace_from_template; 1of4 uq_project_workspace_main_per_workspace
lines 277-280; 7674-7677; 1658-1660
PJ-CRE-1The owner and workspace admins can create projects.Partly defined

The person who creates a project becomes an admin of it, and the project gets a General Chat. When someone other than the workspace owner creates it, the owner becomes an admin of it too (P2.2). Partly defined.

Why is this true?
ClaimPJ-CRE-1
CoversWho creates projects
StateWorks today
CoveragePartly defineda fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelAccepted Gen-5 implementationAccepted runtime evidence (R1–R4)
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 Project creation — the creator receives what the creation rule requires; a different current Workspace Owner additionally receives an open admin project membership; never a duplicate
lines 123-127
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 Every operation that brings a project INTO the ACTIVE state — create project row
lines 324-331
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 public.create_project — owner or admin; creator stored as project admin; General Chat
lines 5614-5616, 5645-5655
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911102459 public.create_project — opens the Workspace Owner's admin project membership where the creator is someone else
lines 26
ChatWellApp/chatwell-supabase · supabase/operator-runbooks/verify_gen5_r1r4_conformance.sql@3bf502a701e5
R1-1 admin-created project gives OWNER admin

Runtime evidence is never an authority of its own. An accepted document says the same thing first; the evidence says only that the running system agrees.

PJ-EDIT-1An admin of the project, or the workspace owner, can change a project's name, its other details, and its type.Partly defined

Partly defined.

Why is this true?
ClaimPJ-EDIT-1
CoversChanging a project's name, details and type
StateWorks today
CoverageGapa fact about the sources, not a reader label
SourcesAccepted Gen-5 implementation
Exact identity
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 public.update_project_details (NOT_PROJECT_ADMIN: only a project admin or the workspace owner); public.set_project_type
lines 4236-4239; 4165
points toWS-OWN-4

The owner of the workspace is the owner of every project in it (P1.2).

P2.2Project membership and accessPermalink

PJ-ACC-1Belonging to a workspace gives no project membership at all.

Being in a workspace is never by itself a way into a project inside it. To be in a project — and so to see its tasks and work on them — a person needs their own membership in that project, as well as access to the workspace and an active project.

Why is this true?
ClaimPJ-ACC-1
CoversProject access needs membership
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesMembership modelAccepted Gen-5 implementation
Exact identity
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 Project-access policy; §5.3 Effective access
lines 251, 720-723
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905175604 public.project_effective_access
lines 155-164
PJ-ACC-2This holds for admins and for the owner too.

A workspace admin who is not a member of a project cannot see it or its tasks. The owner, though owner of every project, sees and works on a project's tasks only while a member of that project. Ownership is not a way past membership — it is a reason the owner has one (PJ-ACC-6).

Why is this true?
ClaimPJ-ACC-2
CoversAlso for admins and the owner
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesWorkspace & project lifecycle modelProject access policy decisionGen-5 task implementation specificationAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.3a Authority is not entitlement
lines 572
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — the membership is an ordinary admin project membership and nothing more; ownership alone never obliges one
lines 83-97
ChatWellApp/chatwell-docs · architecture/gen5-task-domain-implementation-specification.md@cbab557b1b2fcanonical
§I.4 The derived Workspace Owner needs an open project episode
lines 713-717
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905175604 header NO OWNER OVERLAY; 2of4 public.is_project_member (no admin arm)
lines 97-103; 626-646
PJ-ACC-4Accepting a workspace invitation gives the workspace, and no project inside it.

No project comes with it — not the workspace's main project, not that project's chat, not any other project. This is the same in every kind of workspace, Personal Workspaces included.

Why is this true?
ClaimPJ-ACC-4
CoversJoining adds no project
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelAccepted Gen-5 implementationAccepted runtime evidence (R1–R4)
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-02 No invitation fan-out — joining a workspace adds the account to no project, not the default/main project, not that project's chat, not any other; user-created and Personal alike
lines 179-182
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 matrix marker — accept invitation opens W alone and never a P, in every workspace type, the default/main project included; §3 policy — belonging to a workspace opens no P at all
lines 232-244; 288-303
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911101829 public.accept_workspace_invitation — the default-project and default-chat fan-out block is deleted in full; acceptance opens a workspace membership and nothing else
lines 10-36
ChatWellApp/chatwell-supabase · supabase/operator-runbooks/verify_gen5_r1r4_conformance.sql@3bf502a701e5
R2-1 acceptance opens WORKSPACE membership; R2-2 no project episode; R2-3 no project_member row; R2-4 no chat membership

Runtime evidence is never an authority of its own. An accepted document says the same thing first; the evidence says only that the running system agrees.

PJ-ACC-7A member with no projects at all is a correct state.

Someone can belong to a workspace, hold no project membership and see no project chat, and nothing is wrong: ChatWell will not quietly hand them a project to fill the gap. They stay that way until someone gives them a project.

Why is this true?
ClaimPJ-ACC-7
CoversZero projects is correct
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelAccepted Gen-5 implementationAccepted runtime evidence (R1–R4)
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-02 Zero-project members are valid — workspace membership with zero project memberships and zero project chats is intentional and correct, and the backend must not compensate by granting project access automatically
lines 195-199
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 — a workspace member with ZERO project memberships is valid and intentional, and the backend must not repair it; §5.3 truth table row 'never granted'
lines 382-385; 820
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911101829 public.accept_workspace_invitation — nothing opens a project episode; no writer compensates for the absence
lines 26-36
ChatWellApp/chatwell-supabase · supabase/operator-runbooks/verify_gen5_r1r4_conformance.sql@3bf502a701e5
R2-2, R2-3, R2-4 — acceptance leaves the account with no project episode, no project member row and no chat membership

Runtime evidence is never an authority of its own. An accepted document says the same thing first; the evidence says only that the running system agrees.

PJ-ACC-8Project memberships that already exist are left alone.

An earlier version of ChatWell did add people to a project when they joined a workspace. Those memberships are still real memberships and are not taken away; what changed is that joining adds no new ones.

Why is this true?
ClaimPJ-ACC-8
CoversEarlier memberships are kept
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-02 Grandfathered memberships — memberships created by the old fan-out remain valid; the correction is forward-only, they are not revoked and no end reason is invented
lines 201-206
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 — the same rule in the canonical model, with the mechanical reason that §9.1's six end reasons describe none of it
lines 387-391
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911101829 header — the unit deletes no row, closes no episode and rewrites no history; it changes one function body
lines 62-68
PJ-ACC-3People are added to projects one project at a time.Partly defined

An admin of the project, or the workspace owner, adds a current workspace member. A project admin can add people only as members. Leaving or being removed from a project ends only that project membership; the person stays in the workspace. Removing someone who reviews active tasks in the project needs a replacement reviewer named as part of the removal — one person for the whole project, and never someone already responsible for one of those tasks (P1.3). Partly defined.

Why is this true?
ClaimPJ-ACC-3
CoversAdding and removing people
StateWorks today
CoveragePartly defineda fact about the sources, not a reader label
SourcesMembership modelWorkspace & project lifecycle modelTask reviewer authority decisionTask operation contractAccepted Gen-5 implementation
Exact identity
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 operation matrix — add / remove / leave project member
lines 203, 205, 207
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.3 Project Admin — project membership administration
lines 522
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-task-reviewer-authority.md@cbab557b1b2fadopted
G5-TR-02 operation table — a departure replacement must not be the current assignee of any affected task in that project
lines 200
ChatWellApp/chatwell-docs · architecture/task-domain-rpc-contracts.md@cbab557b1b2fcanonical
§6A.1 — remove_project_member carries one replacement and replaces atomically; a replacement that would review its own work is invalid for that project
lines 622-623, 643-650
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 public.add_project_member; public.leave_project; public.remove_project_member (replacement required where a reviewer would be stranded)
lines 1634-1663; 1397-1407; 787-874
points toSD-1

Sources disagree. What happens when the person leaving a project on their own is the reviewer of an active task in it, or its default reviewer. See SD-1 in P3.4.

PJ-ACC-6The workspace owner is a member of every active project in their workspace, with the admin role.

Nobody grants it and nobody has to remember to: for as long as a project is active and the owner has access to the workspace, the membership is there, whoever created the project. It is an ordinary membership carrying the admin role — there is still no role called "owner", and owning a project is still worked out from owning the workspace rather than stored (P1.2).

Three things follow from it:

Why is this true?
ClaimPJ-ACC-6
CoversThe owner's standing project membership
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelWorkspace & project lifecycle modelAccepted Gen-5 implementationAccepted runtime evidence (R1–R4)
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — for every ACTIVE project, a current Workspace Owner with current workspace access holds an open project membership episode with project_role = admin, regardless of who created it; a standing invariant, not a one-time provisioning step, for every workspace type; owner does not become a project role and project ownership is still derived and stored nowhere
lines 67-97
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 policy mechanism table — the standing ACTIVE-project Workspace Owner invariant; §3 G5-PA-01 is a standing invariant over ACTIVE projects; §9.4 registered with the other invariants
lines 297; 305-322; 1650-1655
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.1 EXTENDED FOR GEN-5 — derived ownership is not the owner's membership; the membership carries entitlement, not ownership
lines 442-453
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911102459 public.create_project and the four project-membership writers, keyed on the open ownership episode, never on a stored project-owner role; 20260911102642 forward-only backfill at the real application time
lines 24-30; 79, 174
ChatWellApp/chatwell-supabase · supabase/operator-runbooks/verify_gen5_r1r4_conformance.sql@3bf502a701e5
R1-1 admin-created project gives OWNER admin; U4 pre-existing census eligible 9, conforming 9

Runtime evidence is never an authority of its own. An accepted document says the same thing first; the evidence says only that the running system agrees.

PJ-ACC-9Only active projectsAn archived project is outside the guarantee.

Archiving ends the owner's membership in it along with everyone else's, and nothing reopens it.

Why is this true?
ClaimPJ-ACC-9
CoversActive projects only
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 Archive — when a project becomes archived the invariant requires no open owner membership; the existing archival rule closes project membership episodes, the owner's included, and nothing about archival changes
lines 152-155
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 — the invariant is over ACTIVE projects
lines 305-307
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 public.archive_project — project membership episodes closed with the archival end reason
lines 351-371
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 Restore — a project returning to ACTIVE opens the current Workspace Owner's admin membership in the same transaction, as a new episode; there is no project-restore operation today
lines 157-169
PJ-ACC-10Only while the owner can reach the workspace.

Owning a workspace does not by itself give access to it. If an owner's own access ever ended, they would be owed no project membership, none would be created for them, and the project memberships they hold could close under the ordinary rules — that would be correct, not a fault. Nothing in ChatWell today ends an owner's access to their own workspace, so this does not arise.

Why is this true?
ClaimPJ-ACC-10
CoversConditioned on the owner's own access
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionMembership modelWorkspace & project lifecycle modelAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — where the owner has no current workspace access the invariant requires nothing, none is fabricated, this is not drift, and ownership alone does not restore entitlement
lines 99-111
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 — the no-access table: ownership may remain recorded, project episodes may be closed, no membership required or fabricated, not drift; §9.4 invariant bullet
lines 339-354; 1649-1655
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.3a — an Owner with no open membership episode holds authority of record and cannot act; neither authority nor ownership is a term in either access predicate
lines 572
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911102459 header — the access condition is public.workspace_effective_access; where the owner lacks it the guards do not fire
lines 66-74
PJ-ACC-11It holds the owner in place.

While a project is active, the owner cannot leave it, cannot be removed from it, and cannot be moved down to the ordinary member role in it.

Why is this true?
ClaimPJ-ACC-11
CoversThe owner cannot leave, be removed or be demoted
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesProject access policy decisionTask lifecycle & assignment modelAccepted Gen-5 implementationAccepted runtime evidence (R1–R4)
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — the membership is an open project membership the owner holds for as long as the project is active
lines 67-76
ChatWellApp/chatwell-docs · product/task-lifecycle-and-assignment-model.md@cbab557b1b2fcanonical
§3.5b — 'the project owner can neither leave nor be removed', reaffirmed as binding and untouched by the reviewer-authority decision
lines 906-907
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260911102459 — leave_project, remove_project_member, set_project_member_role and add_project_member all refuse to strand or demote the Workspace Owner in an active project, each keyed on the open ownership episode
lines 24-30
ChatWellApp/chatwell-supabase · supabase/operator-runbooks/verify_gen5_r1r4_conformance.sql@3bf502a701e5
R1-8 owner cannot LEAVE an active project; R1-9 owner cannot be REMOVED; R1-10 owner cannot be DEMOTED

Runtime evidence is never an authority of its own. An accepted document says the same thing first; the evidence says only that the running system agrees.

PJ-ACC-5Partly defined. Outside tasks, the workspace owner currently sees every project in the workspace, with its member list and chat, and can manage its members, roles and archiving, whether or not they are a member of it.Partly defined

For active projects this changes nothing they would not have anyway (PJ-ACC-6); it still matters for archived ones, where the owner holds no membership and keeps this reach (P2.3). No registered document describes that reach; the canonical rules give ownership no access of its own.

Why is this true?
ClaimPJ-ACC-5
CoversOwner reach outside tasks
StateWorks today
CoverageGapa fact about the sources, not a reader label
SourcesAccepted Gen-5 implementationGen-5 task implementation specificationProject access policy decisionWorkspace & project lifecycle model
Exact identity
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 public.is_project_member (ownership overlay attributed to OD-2); public._project_auth_context owner arm
lines 626-646; 702-707
ChatWellApp/chatwell-docs · architecture/gen5-task-domain-implementation-specification.md@cbab557b1b2fcanonical
§I.4 out-of-scope note — OD-2 exists in no registered document; reconciliation belongs to other workstreams
lines 745-753
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — the owner now holds a real project membership in ACTIVE projects, so the undocumented overlay is what remains beyond it; archived projects require none
lines 67-76, 152-155
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.3a ('Neither authority nor ownership is a term in either predicate')
lines 572
PJ-ROLE-1Inside a project, members are member or admin, and changing that role works today — for the workspace owner.Partly defined

Every change between member and admin needs the workspace owner; a project admin cannot make or remove project admins. The one role nobody can lower is the owner's own, in an active project: it stays admin (PJ-ACC-6). Partly defined.

Why is this true?
ClaimPJ-ROLE-1
CoversChanging project roles
StateWorks today
CoveragePartly defineda fact about the sources, not a reader label
SourcesWorkspace & project lifecycle modelProject access policy decisionAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§6.3 The four roles — Workspace Owner grants Project Admin; Project Admin row
lines 519-522
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 — the owner's membership carries role admin in every ACTIVE project, so it cannot be lowered there
lines 67-76
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 set_project_member_role (ADMIN_CEILING); 20260905202219 add_project_member, remove_project_member
lines 4525-4531; 1645-1648; 733-735
PJ-ROLE-2Changing a role does not interrupt membership.

It neither ends nor restarts the person's project membership.

Why is this true?
ClaimPJ-ROLE-2
CoversRole change keeps membership
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesMembership modelAccepted Gen-5 implementation
Exact identity
documentMembership modelD-MEM
ChatWellApp/chatwell-docs · architecture/membership-episodes-model.md@cbab557b1b2fcanonical
§3 operation matrix — role change touches nothing; Two operations that deliberately touch nothing
lines 211, 398
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 public.set_project_member_role — updates the role only
lines 4530-4533
FIG-P2-2Workspace membership and project access are separatecurrent behaviour only
PersonLeo
PersonAnna
WorkspaceNorthstar Studio
ProjectMain project
ProjectWebsite Redesign
Relations · access overlay
PersonLeorelationWorkspaceNorthstar Studio
member
PersonLeorelation does not existProjectMain project
accepting the invitation opened no project — cannot see its tasks
PersonLeorelation does not existProjectWebsite Redesign
no project membership — cannot see its tasks
PersonAnnarelationProjectMain project
member with the admin role — she owns the workspace (PJ-ACC-6)
PersonAnnarelationProjectWebsite Redesign
member with the admin role — she owns the workspace (PJ-ACC-6)

Leo holds workspace membership and no project at all. That is a correct state, not a fault (PJ-ACC-7).

P2.3Archiving a projectPermalink

PJ-ARCH-1An admin of the project, or the workspace owner, can archive any project except the main one.Partly defined

Archiving is one-way today: there is no way to reopen the project. Partly defined.

Why is this true?
ClaimPJ-ARCH-1
CoversWho archives; one-way today
StateWorks today
CoveragePartly defineda fact about the sources, not a reader label
SourcesWorkspace & project lifecycle modelAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§4.2 archive_project() — a domain operation
lines 236-244
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 public.archive_project — project admin or workspace owner; main project refused; no restore operation in the chain
lines 270-280
PJ-ARCH-2The archive action closes the unfinished work.

Every task in the project that is not already Complete or Canceled becomes Canceled, with the archival recorded as the reason. The archive action does this itself, and each task's history records the move to Canceled.

Why is this true?
ClaimPJ-ARCH-2
CoversArchive closes unfinished work
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesGen-5 lifecycle decisionsGen-5 task implementation specificationAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · decisions/ADR-2026-08-gen5-lifecycle-domain.md@cbab557b1b2fadopted
G5-14 Task disposition on archival
lines 656-670, 675-676
ChatWellApp/chatwell-docs · architecture/gen5-task-domain-implementation-specification.md@cbab557b1b2fcanonical
§U.1 The rule
lines 2256-2260
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 public.archive_project — closure before freeze
lines 320-349
PJ-ARCH-3Nothing is reassigned, and memberships end.

The project's memberships end with the archival as the reason — the workspace owner's among them, since the standing guarantee covers active projects only (PJ-ACC-9). Assignees and reviewers stay recorded as they were when the project closed. The workspace and its other projects are not touched.

Why is this true?
ClaimPJ-ARCH-3
CoversNothing reassigned
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesWorkspace & project lifecycle modelTask lifecycle & assignment modelProject access policy decisionAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§4.2 steps 3-5; §4.5 no reassignment
lines 246-251, 296-299
ChatWellApp/chatwell-docs · product/task-lifecycle-and-assignment-model.md@cbab557b1b2fcanonical
§3.4 — on archival the default reviewer is a historical fact, neither cleared nor reassigned
lines 683-688
ChatWellApp/chatwell-docs · decisions/ADR-2026-09-project-access-policy.md@cbab557b1b2fadopted
G5-PA-01 Archive — the archival rule closes project membership episodes, the owner's R1 membership included
lines 152-155
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260905202219 public.archive_project — episodes closed project_archived; membership rows removed
lines 351-371
PJ-ARCH-4Afterwards, nobody can open or change the project's tasks through ChatWell today — not its members, not the workspace owner — and no new tasks can be created in it.

The content is kept (T2.6).

Why is this true?
ClaimPJ-ARCH-4
CoversTasks closed to everyone
StateWorks today
CoverageFulla fact about the sources, not a reader label
SourcesTask lifecycle & assignment modelGen-5 task implementation specificationAccepted Gen-5 implementation
Exact identity
ChatWellApp/chatwell-docs · product/task-lifecycle-and-assignment-model.md@cbab557b1b2fcanonical
§4.0 SUPERSEDED FOR GEN-5 banner
lines 994-998
ChatWellApp/chatwell-docs · architecture/gen5-task-domain-implementation-specification.md@cbab557b1b2fcanonical
§U.5 Accepted consequence
lines 2432-2434
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
20260907070001 public.create_task (last definition) refuses archived projects; 20260905175604 project_effective_access
lines 215-217; 155-164
PJ-ARCH-5Partly defined. Outside tasks, the workspace owner currently keeps more:Partly defined

they still see an archived project in their project list, can read and post in its chat, can see its past memberships, can still change its name, details and type, and can add current workspace members to it. Anyone added this way gets the project, its member list and its chat back — never its tasks. The decided rule closes archived content to ordinary access, and no registered document describes these exceptions.

Why is this true?
ClaimPJ-ARCH-5
CoversOwner exceptions outside tasks
StateWorks today
CoverageGapa fact about the sources, not a reader label
SourcesAccepted Gen-5 implementationWorkspace & project lifecycle modelSource of Truth Map
Exact identity
migration-chainAccepted Gen-5 implementationB-MIG
ChatWellApp/chatwell-supabase · supabase/migrations/@3bf502a701e5
2of4 public.list_my_projects_with_unread; 3of4 channel / chat_message / project_membership_episode select policies via is_project_member; 2of4 public.send_message; 2of4 public.set_project_type and public.update_project_details (owner or project admin, no archived-status check); 20260905202219 public.add_project_member (no project-status check)
lines 3620-3623; 1076-1102, 1204-1212; 5150-5152; 4176-4196, 4207-4248; 1583-1698
ChatWellApp/chatwell-docs · architecture/workspace-lifecycle-model.md@cbab557b1b2fcanonical
§4.5 SUPERSEDED FOR GEN-5 banner (applies to both archival paths)
lines 301-316
documentSource of Truth MapD-SOT
ChatWellApp/chatwell-docs · source-of-truth-map.md@cbab557b1b2fcanonical
Registry row 'Access predicates — two live, two historical' — access denied by default after archival

Sources disagree: whom the archival cancellations namePermalink

Sources disagree SD-2

Sources disagree. Whom a task's history names as having acted, for the cancellations written when a person archives a project.

The task lifecycle & assignment model, and one part of the Gen-5 task implementation specification, sayAnother part of the Gen-5 task implementation specification says
Archival closes these tasks with no human actor: the entries name no one as having acted.The entries name the person who archived the project as having acted.

This guide does not choose between them. The disagreement stands until the owners of those sources resolve it.

Meanwhile: assume neither — neither that these entries name the person who archived the project, nor that they name no one.

Not affected: that archiving cancels the project's unfinished tasks automatically (PJ-ARCH-2); that each task records the archival as the reason it closed (XD-SYS-1); that these entries carry no creator, assignee or reviewer markers (TK-HIS-3); and who can reach an archived project's tasks (XD-ARCH-1).

Classification: Sources disagree (newly surfaced in this pilot; bounded to the actor named on archival cancellation entries). The accepted implementation was not used to adjudicate it.

Also appears in (computed by this rendering): P3.5
Exact identity
ChatWellApp/chatwell-docs · product/task-lifecycle-and-assignment-model.md@cbab557b1b2fcanonical
§1.11 SCOPED FOR GEN-5 banner — container archival closes tasks 'with no modal and no human actor'
lines 269-275
ChatWellApp/chatwell-docs · architecture/gen5-task-domain-implementation-specification.md@cbab557b1b2fcanonical
§D.4 subject table — archival cancellation: NULL subject and NULL actor; §U.2c and §U.3 — the archiving caller is the actor of the closure entries
lines 278, 2380-2383, 2410-2416
FIG-P2-3A project is archived in one stepcurrent behaviour only
ActiveArchived
FromToWhat happensMade by
ActiveArchivedan admin of the project, or the workspace owner, archives itperson
Archivedno outgoing move

The same action cancels the project's unfinished tasks (P2.3). No transition leads back from Archived today.

Illustrates PJ-ARCH-1

What this means for a prototype — ProjectsPermalink

Every entry names the claim groups or records it derives from. It carries no state of its own; the state shown on each chip is that of the group or record cited.

MUST PRESERVE

  • Workspace membership and project membership are separate; being in a project at all — not merely reaching its tasks — needs a person's own project membership.fromPJ-ACC-1
  • Joining a workspace opens no project and no project chat, in every kind of workspace.fromPJ-ACC-4
  • An interface must work for a member who has workspace access, no projects and no project chats: that state is correct and needs no repair.fromPJ-ACC-7
  • The workspace owner is an admin member of every active project, for as long as they can reach the workspace — as a membership, never as a role named "owner", and never as access without one.fromPJ-ACC-6PJ-ACC-2PJ-ACC-10
  • A project's owner is always the workspace's owner; it is never set, stored or changed per project.fromWS-OWN-4
  • The main project cannot be archived on its own.fromPJ-MAIN-1
  • Archiving closes unfinished tasks as part of the archive action, with the archival as the reason — not as ordinary cancellations.fromPJ-ARCH-2XD-SYS-1
  • Archiving reassigns nothing; assignee and reviewer stay as recorded.fromPJ-ARCH-3

MUST NOT ASSUME

  • That a workspace admin is automatically in every project.fromPJ-ACC-2
  • That the owner can see a project's tasks because they own the workspace: they see them through the membership the guarantee gives them, and an archived project gives them none.fromPJ-ACC-2PJ-ACC-6PJ-ACC-9
  • That because the owner can see a project, they can see its tasks.fromPJ-ACC-5PJ-ACC-2
  • That the owner's project membership exists when the owner has lost access to the workspace, or that it is written back over that time if they return.fromPJ-ACC-10
  • That joining a workspace adds a project, a main project or a project chat.fromPJ-ACC-4
  • That a member who shows no projects is an error state, an empty result to be filled in, or a sign that something failed.fromPJ-ACC-7
  • That nobody has a project they did not receive explicitly: memberships made before this rule remain.fromPJ-ACC-8
  • That an archived project can be reopened, restored or exported today.fromPJ-ARCH-1XD-ARCH-1DNA-4
  • That a project admin can change project roles.fromPJ-ROLE-1
  • That the owner can be removed from, demoted in, or made to leave an active project.fromPJ-ACC-11
  • That losing ownership of a workspace would strip the outgoing owner's project memberships.fromDNA-1
  • That role changes appear in history today.fromDNA-10
  • That removing someone from a project always succeeds without naming a replacement reviewer, or that any member can be that replacement.fromPJ-ACC-3WS-MEM-7
  • That leaving a project always succeeds, or always hands a reviewer's tasks on: the sources disagree.fromSD-1
  • That the history entries written by archiving a project name the person who archived it, or that they name no one: the sources disagree.fromSD-2

Where this comes from — ProjectsPermalink

Where this comes from22 claim groups
Claim groupCoversStateCoverageSources
PJ-WHAT-1What a project isWorks todayFullWorkspace & project lifecycle model · Accepted Gen-5 implementation
PJ-MAIN-1The main projectWorks todayPartly definedMembership model · Accepted Gen-5 implementation
PJ-CRE-1Who creates projectsWorks todayPartly definedProject access policy decision · Membership model · Accepted Gen-5 implementation · Accepted runtime evidence (R1–R4)
PJ-EDIT-1Changing a project's name, details and typeWorks todayGapAccepted Gen-5 implementation
PJ-ACC-1Project access needs membershipWorks todayFullMembership model · Accepted Gen-5 implementation
PJ-ACC-2Also for admins and the ownerWorks todayFullWorkspace & project lifecycle model · Project access policy decision · Gen-5 task implementation specification · Accepted Gen-5 implementation
PJ-ACC-6The owner's standing project membershipWorks todayFullProject access policy decision · Membership model · Workspace & project lifecycle model · Accepted Gen-5 implementation · Accepted runtime evidence (R1–R4)
PJ-ACC-9Active projects onlyWorks todayFullProject access policy decision · Membership model · Accepted Gen-5 implementation
PJ-ACC-10Conditioned on the owner's own accessWorks todayFullProject access policy decision · Membership model · Workspace & project lifecycle model · Accepted Gen-5 implementation
PJ-ACC-11The owner cannot leave, be removed or be demotedWorks todayFullProject access policy decision · Task lifecycle & assignment model · Accepted Gen-5 implementation · Accepted runtime evidence (R1–R4)
PJ-ACC-3Adding and removing peopleWorks todayPartly definedMembership model · Workspace & project lifecycle model · Task reviewer authority decision · Task operation contract · Accepted Gen-5 implementation
PJ-ACC-4Joining adds no projectWorks todayFullProject access policy decision · Membership model · Accepted Gen-5 implementation · Accepted runtime evidence (R1–R4)
PJ-ACC-7Zero projects is correctWorks todayFullProject access policy decision · Membership model · Accepted Gen-5 implementation · Accepted runtime evidence (R1–R4)
PJ-ACC-8Earlier memberships are keptWorks todayFullProject access policy decision · Membership model · Accepted Gen-5 implementation
PJ-ACC-5Owner reach outside tasksWorks todayGapAccepted Gen-5 implementation · Gen-5 task implementation specification · Project access policy decision · Workspace & project lifecycle model
PJ-ROLE-1Changing project rolesWorks todayPartly definedWorkspace & project lifecycle model · Project access policy decision · Accepted Gen-5 implementation
PJ-ROLE-2Role change keeps membershipWorks todayFullMembership model · Accepted Gen-5 implementation
PJ-ARCH-1Who archives; one-way todayWorks todayPartly definedWorkspace & project lifecycle model · Accepted Gen-5 implementation
PJ-ARCH-2Archive closes unfinished workWorks todayFullGen-5 lifecycle decisions · Gen-5 task implementation specification · Accepted Gen-5 implementation
PJ-ARCH-3Nothing reassignedWorks todayFullWorkspace & project lifecycle model · Task lifecycle & assignment model · Project access policy decision · Accepted Gen-5 implementation
PJ-ARCH-4Tasks closed to everyoneWorks todayFullTask lifecycle & assignment model · Gen-5 task implementation specification · Accepted Gen-5 implementation
PJ-ARCH-5Owner exceptions outside tasksWorks todayGapAccepted Gen-5 implementation · Workspace & project lifecycle model · Source of Truth Map

Coverage is a fact about the sources, not a reader label. Gap is not one of the five labels.