Skip to content

feat(platform): add project teams - #328

Merged
Brooooooklyn merged 18 commits into
mainfrom
feat/void-platform-project-teams
Sep 22, 2026
Merged

Brooooooklyn merged 18 commits into
mainfrom
feat/void-platform-project-teams

Conversation

@Brooooooklyn

@Brooooooklyn Brooooooklyn commented Sep 17, 2026 •

Copy link
Copy Markdown
Member

Summary

  • add project-scoped reader, collaborator, admin, and implicit owner roles for Void Platform projects
  • require invitation targets to already have a registered Void account
  • enforce live capability checks across deploys, configuration, teams, and project lifecycle operations
  • bill usage and enforce quotas against the current owner, including exact ownership-transfer accounting
  • add installation-admin ownership transfer through the operator API, CLI, and admin dashboard
  • harden concurrent ownership, membership, deletion, email, revalidation, deployment cancellation, and usage reconciliation paths
  • derive the current owner plan under lock for deploy, build, OIDC, and scheduler admission
  • preserve routing suspension state during first deploy and OAuth denial cleanup
  • reject team mutations after project deletion starts
  • remove dead helpers, unused queries, redundant non-production tests, and stale comments
  • keep direct Cloudflare deployments isolated from platform team functionality
  • document project collaboration and administration workflows
  • merge origin/main at a5a010b, preserving its custom email-domain work and moving the project-team migration to 0048

Verification

  • vp run check — all 26 workspaces passed
  • vp lint — passed
  • vp fmt --check — passed
  • git diff --check — passed
  • latest affected-scope batch — 448 tests passed
  • dedicated routing and operator suites — 60 tests passed
  • custom email-domain suite — 91 tests passed
  • full workspace suite — 10,338 tests passed
  • Svelte suite passed twice in isolation after a single full-parallel startup timeout

Known unrelated test failure

The unchanged Vue pages client form-identity assertions fail in both dev and preview. Both failures reproduce independently, and this branch changes none of the related Vue source, fixture, dependency, or configuration paths.

@Brooooooklyn
Brooooooklyn force-pushed the feat/void-platform-project-teams branch from ec73abf to 7d6227a Compare September 18, 2026 08:21
@Brooooooklyn
Brooooooklyn marked this pull request as ready for review September 20, 2026 15:55
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-09-22T10:03:36.246666Z d97540e New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f74765c20e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/drizzle/0048_project_teams.sql
@Brooooooklyn
Brooooooklyn force-pushed the feat/void-platform-project-teams branch from f74765c to 92c037c Compare September 20, 2026 16:54

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 92c037c27c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/routes/email.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0b3cfd547b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/provisioning/cleanup.ts Outdated
Comment thread platform/packages/proxy/src/index.ts
Comment thread platform/packages/api/src/db.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8b0b1abd53

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/operator/tenant-service.ts
Comment thread platform/packages/api/src/routes/usage.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8b0b1abd53

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/routes/projects.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ac00196105

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/usage-counter.ts Outdated
Comment thread platform/packages/api/src/db.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bbe84866d6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/provisioning/cleanup.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 78bcb50570

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread platform/packages/api/src/usage-auth.ts
Comment thread platform/packages/api/src/usage-counter.ts
Comment thread platform/packages/api/src/usage-counter.ts
@Brooooooklyn
Brooooooklyn merged commit 7641bcf into main Sep 22, 2026
19 checks passed
@Brooooooklyn
Brooooooklyn deleted the feat/void-platform-project-teams branch September 22, 2026 10:27
Brooooooklyn added a commit that referenced this pull request Sep 22, 2026
Project deletion could remain stuck in `deleting` when AI Analytics was
unavailable. Invitation commands could also contact an old linked
platform, the landing page gave unsupported relinking instructions, and
expired invitation renewals could exceed the pending-invitation cap.
This fixes the acceptance regressions found after #328.

## Changes

- Persist the detached ownership window, last usage sample, and retry
alarm atomically so deletion and transfer can finish during Analytics
outages. Reconcile later, retain useful provider errors, and handle
billing rollover and deleted accounts.
- Resolve account-scoped invitation commands against the selected
platform with origin-bound credentials. Preserve existing project links
and explain the supported onboarding flow.
- Enforce the 100-live-invitation cap for creation, refresh, and resend
under the project lock.
- Show project roles, reject reader deployment targets before building,
and provide recovery commands for failed invitation email delivery and
invalid invitations.
- Add regression coverage and update collaboration documentation.

## Validation

- Core build, repository formatting/lint, platform type-aware lint, and
all 28 tracked workspace type checks passed.
- Complete platform suite with a fresh UTC database cache: **4,247
passed**, 15 PostgreSQL-gated tests skipped.
- Isolated PostgreSQL 17.11: **210 passed, zero skipped**, including all
15 gated cases and invitation concurrency. Test server shutdown
verified.
- Broad SDK/platform run: **10,622 passed**; four assertions and one
suite setup initially failed. Two assertions came from a cached database
timezone mismatch, two required the new project-list preflight in the
deployment mock, and kitchen-sink setup had stale local D1 migration
history. The complete platform rerun, updated deployment integration
(**3/3**), and fresh-D1 kitchen-sink rerun (**27/27**) passed. The broad
suite was not rerun in its entirety afterward.
- Canonical `vp run check` remains blocked by an unrelated ignored
scratch app missing its TypeScript compiler dependency; tracked
workspace checks pass.

## Staging follow-up

These changes have not been deployed. Live multi-account invitation/role
journeys, operator ownership transfer, and cleanup of the disposable
staging QA project remain pending. The underlying provider-side
Analytics failure still needs staging diagnosis; it no longer blocks
deletion in the covered regression.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant