Skip to content

CS-422 [BUG] Employees missing following confluence sync#2896

Merged
tofikwest merged 5 commits into
mainfrom
chas/confluence-sync
May 21, 2026
Merged

CS-422 [BUG] Employees missing following confluence sync#2896
tofikwest merged 5 commits into
mainfrom
chas/confluence-sync

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented May 21, 2026

This is an automated pull request to merge chas/confluence-sync into dev.
It was created by the [Auto Pull Request] action.


Summary by cubic

Fixes CS-422 by gating Phase 2 deactivation behind a new isDirectorySource flag (default off). Non-directory tools like Confluence no longer deactivate employees missing from their API; authoritative directories can still offboard.

  • New Features

    • Added isDirectorySource to SyncDefinition and IntegrationManifest (default false).
    • Controller forwards the flag; service skips Phase 2 when false, runs when true and only deactivates absent members in the same email domain.
    • Added tests for default omit, explicit false, true, and cross-domain no-op.
  • Migration

    • Set isDirectorySource: true for directory-of-record providers (Google Workspace, Okta, Entra, JumpCloud, Rippling); code-based manifests for google-workspace and rippling are already set.
    • Leave it false for product-scoped tools (Confluence, Slack, Notion, GitHub, Jira).

Written for commit 410f378. Summary will update on new commits. Review in cubic

@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Ready Ready Preview, Comment May 21, 2026 7:25pm
comp-framework-editor Ready Ready Preview, Comment May 21, 2026 7:25pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
portal Skipped Skipped May 21, 2026 7:25pm

Request Review

@chasprowebdev chasprowebdev changed the title [dev] [chasprowebdev] chas/confluence-sync CS-422 [BUG] Employees missing following confluence sync May 21, 2026
@linear
Copy link
Copy Markdown

linear Bot commented May 21, 2026

CS-422

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 4 files

Confidence score: 2/5

  • There is a high-confidence, high-severity logic mismatch in apps/api/src/integration-platform/controllers/sync.controller.ts: using ?? true conflicts with defaults of false in both the Zod schema and service layer.
  • This can concretely flip behavior for integrations missing isDirectorySource (such as Confluence), creating a likely regression in sync handling rather than a minor edge case.
  • Given the 8/10 severity and 9/10 confidence, this is risky to merge until the fallback behavior is aligned across controller, schema, and service.
  • Pay close attention to apps/api/src/integration-platform/controllers/sync.controller.ts - incorrect defaulting may misclassify source type and alter sync behavior.

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread apps/api/src/integration-platform/controllers/sync.controller.ts Outdated
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread packages/integration-platform/src/dsl/types.ts Outdated
…uthoritative manifests

Companion to the SyncDefinition.isDirectorySource flag added earlier in this PR:

- Add `isDirectorySource?: boolean` to the `IntegrationManifest` interface so
  code-based manifests can advertise themselves as authoritative employee
  directories with the same vocabulary that dynamic integrations use via
  `SyncDefinition.isDirectorySource`.

- Set `isDirectorySource: true` on the two code-based manifests that actually
  perform employee sync today: `google-workspace` and `rippling`. Both are
  customer-trusted directories of who works at the company, and their inline
  Phase 2 deactivation in `sync.controller.ts` is the correct behavior for
  them.

Why this matters even though the inline GWS/Rippling sync paths don't go
through `processEmployees` today:

- Consistency: every authoritative directory now declares its role in one
  obvious place, regardless of code-based vs dynamic.
- Documentation: a future reader of the manifest immediately sees "this
  integration is the source of truth for employment status."
- Future-proofing: if the inline GWS/Rippling sync paths are ever
  consolidated into the generic `processEmployees` pipeline, the flag is
  already correctly set and the consolidation becomes a one-line change.

No behavior change today — purely declarative.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel vercel Bot temporarily deployed to Preview – portal May 21, 2026 19:20 Inactive
@tofikwest tofikwest merged commit 660daba into main May 21, 2026
9 of 11 checks passed
@tofikwest tofikwest deleted the chas/confluence-sync branch May 21, 2026 19:24
@claudfuen
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.61.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants